opengles 3.0 hello
来源:互联网 发布:简历生活照怎么照之乎 编辑:程序博客网 时间:2024/05/22 08:19
《opengles 3.0编程指南》
#include "esUtil.h"
typedef struct
{
GLuint programObject;
} UserData;
//创建着色器,并编译,返回着色器变量
GLuint LoadShader ( GLenum type, const char *shaderSrc )
{
GLuint shader;
GLint compiled;
//创建着色器对象
shader = glCreateShader ( type );
if ( shader == 0 )
{
return 0;
}
//加载
glShaderSource ( shader, 1, &shaderSrc, NULL );
//编译
glCompileShader ( shader );
//检查错误
glGetShaderiv ( shader, GL_COMPILE_STATUS, &compiled );
if ( !compiled )
{
GLint infoLen = 0;
glGetShaderiv ( shader, GL_INFO_LOG_LENGTH, &infoLen );
if ( infoLen > 1 )
{
char *infoLog = malloc ( sizeof ( char ) * infoLen );
glGetShaderInfoLog ( shader, infoLen, NULL, infoLog );
esLogMessage ( "Error compiling shader:\n%s\n", infoLog );
free ( infoLog );
}
glDeleteShader ( shader );
return 0;
}
return shader;
}
int Init ( ESContext *esContext )
{
UserData *userData = esContext->userData;
char vShaderStr[] =
"#version 300 es \n"
"layout(location = 0) in vec4 vPosition; \n"
"void main() \n"
"{ \n"
" gl_Position = vPosition; \n"
"} \n";
char fShaderStr[] =
"#version 300 es \n"
"precision mediump float; \n"
"out vec4 fragColor; \n"
"void main() \n"
"{ \n"
" fragColor = vec4 ( 1.0, 0.0, 0.0, 1.0 ); \n"
"} \n";
GLuint vertexShader;
GLuint fragmentShader;
GLuint programObject;
GLint linked;
// 加载着色器
vertexShader = LoadShader ( GL_VERTEX_SHADER, vShaderStr );
fragmentShader = LoadShader ( GL_FRAGMENT_SHADER, fShaderStr );
// 创建着色器对象
programObject = glCreateProgram ( );
if ( programObject == 0 )
{
return 0;
}
// 将顶点着色器和片段着色器连接到programObject上
glAttachShader ( programObject, vertexShader );
glAttachShader ( programObject, fragmentShader );
// 链接
glLinkProgram ( programObject );
// 检查错误
glGetProgramiv ( programObject, GL_LINK_STATUS, &linked );
if ( !linked )
{
GLint infoLen = 0;
glGetProgramiv ( programObject, GL_INFO_LOG_LENGTH, &infoLen );
if ( infoLen > 1 )
{
char *infoLog = malloc ( sizeof ( char ) * infoLen );
glGetProgramInfoLog ( programObject, infoLen, NULL, infoLog );
esLogMessage ( "Error linking program:\n%s\n", infoLog );
free ( infoLog );
}
glDeleteProgram ( programObject );
return FALSE;
}
// Store the program object
userData->programObject = programObject;
//将颜色缓冲区赋为白色
glClearColor ( 1.0f, 1.0f, 1.0f, 0.0f );
return TRUE;
}
void Draw ( ESContext *esContext )
{
UserData *userData = esContext->userData;
//设置顶点
GLfloat vVertices[] = { 0.0f, 0.5f, 0.0f,
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f
};
// 设置视口
glViewport ( 0, 0, esContext->width, esContext->height );
// Clear the color buffer
glClear ( GL_COLOR_BUFFER_BIT );
// 将programObject与程序绑定
glUseProgram ( userData->programObject );
// 加载顶点数据
glVertexAttribPointer ( 0, 3, GL_FLOAT, GL_FALSE, 0, vVertices );
glEnableVertexAttribArray ( 0 );
//绘制
glDrawArrays ( GL_TRIANGLES, 0, 3 );
}
void Shutdown ( ESContext *esContext )
{
UserData *userData = esContext->userData;
glDeleteProgram ( userData->programObject );
}
//入口函数 负责分配userDara,创建窗口,初始化回调 //ESContext有一个userData 将所有数据保存在这里面
int esMain ( ESContext *esContext )
{
esContext->userData = malloc ( sizeof ( UserData ) );
esCreateWindow ( esContext, "Hello Triangle", 320, 240, ES_WINDOW_RGB );
if ( !Init ( esContext ) )
{
return GL_FALSE;
}
esRegisterShutdownFunc ( esContext, Shutdown );
esRegisterDrawFunc ( esContext, Draw );
return GL_TRUE;
}
0 0
- opengles 3.0 hello
- opengles(一) hello world
- OpenGLES 3.0
- OpenglES 3.0基础知识
- opengles
- opengles
- opengles
- Opengles
- OpenGLES
- Weird Shader Problem On OpenGLES 3.0
- windows 下 openGLES 3.0 配合 vs 环境搭建(一)
- windows下openGLES 3.0 配合 vs 环境搭建(二)
- opengles 画球
- opengles 投影
- opengles概览
- OpenglES Demo1
- opengles起步
- Opengles绘图
- :Decision Tree classifier
- 算法设计之算法概论
- Python内置函数学习(2)-all(iterable)
- CodeForces731C 并查集
- Sql Server 游标用法
- opengles 3.0 hello
- SQL语句
- C语言运算符:(一)
- 转载:UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别
- 网络模型与应用协议
- CODEVS 3145汉诺塔游戏
- Maven
- hibernate插入数据库乱码解决方案
- Android内存优化大全