OpenGL和OpenGL ES是用于开发图形渲染和计算机视觉应用的两种不同的API(应用程序接口)。
OpenGL ES是OpenGL的子集,是专门为嵌入式设备和移动设备设计的,具有较小的API接口,并且去除了某些在嵌入式设备上不常用的功能,如长距离管线等。因此,OpenGL ES比OpenGL更小、更简单,并且具有更好的性能。
要编写OpenGL和OpenGL ES兼容的代码,您需要遵循一些通用的指南:
以下是一些编写OpenGL和OpenGL ES兼容代码的示例:
#include <glad/glad.h>
#include <GLES2/gl2.h>
int main() {
// 初始化GLAD
if (!gladLoadGLLoader((GLADloadproc)glGetString(GL_GL_LOADER))) {
return -1;
}
// 创建并初始化着色器
GLuint shaderProgram = glCreateProgram();
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
glCompileShader(vertexShader);
glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
glCompileShader(fragmentShader);
// 链接着色器
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram);
// 激活该着色器
glUseProgram(shaderProgram);
// 创建并初始化顶点数据
GLfloat vertices[] = {
-0.5f, -0.5f, 0.0f,
-0.5f, 0.5f, 0.0f,
0.5f, 0.5f, 0.0f};
GLuint vbo;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// 定义顶点属性
GLint posAttrib = glGetAttribLocation(shaderProgram, "a_position");
glEnableVertexAttribArray(posAttrib);
glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), 0);
GLint texCoordAttrib = glGetAttribLocation(shaderProgram, "a_texCoord");
glEnableVertexAttribArray(texCoordAttrib);
glVertexAttribPointer(texCoordAttrib, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), (void*)(2 * sizeof(GLfloat)));
// 解绑
glBindTexture(GL_TEXTURE_2D, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
// 渲染
glViewport(0, 0, width, height);
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
return 0;
}
#include <glad/glad.h>
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
int main() {
// 初始化GLAD
if (!gladLoadGLES2Loader((GLADloadproc)glGetString(GL_GL_LOADER))) {
return -1;
}
// 创建并初始化着色器
GLuint shaderProgram = glCreateProgram();
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
GLuint fragmentShader
云+社区沙龙online[数据工匠]
Elastic 实战工作坊
Elastic 中国开发者大会
Elastic 实战工作坊
Techo Day 第二期
领取专属 10元无门槛券
手把手带您无忧上云