在 Linux 环境下使用 OpenGL ES 画四个矩形,你通常会使用 OpenGL ES 的 API。以下是一个简单的示例,展示如何创建一个窗口并在其上绘制四个矩形。
安装依赖
确保你已经安装了相关的库,比如 libGLES2
和 libEGL
。如果你使用的是 Ubuntu,可以通过以下命令安装它们:
sudo apt-get install libgles2-mesa-dev libegl1-mesa-dev
示例代码
这是一个基本的 C++ 程序,使用 OpenGL ES 绘制四个矩形:
#include <EGL/egl.h>
#include <GLES2/gl2.h>
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
Display *display;
Window window;
EGLDisplay eglDisplay;
EGLContext eglContext;
EGLSurface eglSurface;
void init() {
// 设置视口
glViewport(0, 0, 800, 600);
// 清空颜色缓冲区
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
}
void drawRect(float x, float y, float width, float height) {
GLfloat vertices[] = {
x, y,
x + width, y,
x + width, y + height,
x, y + height,
};
GLuint vertexBuffer;
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, (void*)0);
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
glDeleteBuffers(1, &vertexBuffer);
}
int main() {
// 打开 X11 窗口
display = XOpenDisplay(NULL);
int screen = DefaultScreen(display);
Window rootWindow = RootWindow(display, screen);
// 创建窗口
window = XCreateSimpleWindow(display,
rootWindow,
10,
10,
800,
600,
1,
BlackPixel(display, screen),
WhitePixel(display, screen));
XMapWindow(display , window);
// EGL 初始化
eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
eglInitialize(eglDisplay , NULL , NULL );
EGLConfig config;
EGLint numConfigs;
static const EGLint attribs[] = {
EGL_SURFACE_TYPE , EGL_WINDOW_BIT ,
EGL_RENDERABLE_TYPE , EGL_OPENGL_ES2_BIT ,
EGL_NONE
};
eglChooseConfig(eglDisplay , attribs , &config , 1 , &numConfigs );
eglSurface = eglCreateWindowSurface(eglDisplay , config , (NativeWindowType)window , NULL );
static const EGLint context_attribs[] = {
EGL_CONTEXT_CLIENT_VERSION , 2 ,
EGL_NONE
};
eglContext = eglCreateContext(eglDisplay , config , EGL_NO_CONTEXT , context_attribs );
eglMakeCurrent(eglDisplay , eglSurface , eglSurface , eglContext );
init();
while (1) {
// 清屏
glClear(GL_COLOR_BUFFER_BIT);
// 绘制四个矩形
drawRect(-0.5f,-0.5f,.25f,.25f); // 左下角矩形
drawRect(0.5f,-0.5f,.25f,.25f); // 左下角矩形
drawRect(-0.5f,+0.5f,.25f,.25f); // 左上角矩形
drawRect(+0.5f,+0.5f,.25f,.25f); // 左上角矩形
eglSwapBuffers(eglDisplay , eglSurface );
if(XPending(display)) break;
}
// 清理资源
eglDestroyContext(eglDisplay , eglContext );
eglDestroySurface(eglDisplay ;ekgL Surface );
XDestroyWindow(display ; window );
XCloseDisplay (display );
return EXIT_SUCCESS;
}
编译和运行
将以上代码保存到一个名为 main.cpp
的文件中,并使用以下命令编译:
g++ -o opengles_example main.cpp -lEGL -lGLESv2 -lX11
然后运行生成的可执行文件:
./opengles_example
注意事项
- 此示例假定您正在使用具有 OpenGL ES 支持的系统,并且可以在您的环境中正确设置库。
- 本例仅作为一个简单起点,真实项目中需要考虑更多因素,如错误处理、上下文管理等。
希望这对您有所帮助!如果有其他问题,请随时问我。
内容由零声教学AI助手提供,问题来源于学员提问