OpenGLShader 编程系列-属性变量,一致变量的传递

int Init ( ESContext *esContext )

{

esContext->userData = malloc(sizeof(UserData));

UserData *userData = esContext->userData;

GLbyte vShaderStr[] =

"uniform mat4 u_mvpMatrix;                   \n"

"attribute vec4 a_position;                  \n"

"void main()                                 \n"

"{                                           \n"

"   gl_Position = u_mvpMatrix * a_position;  \n"

"}                                           \n";

GLbyte fShaderStr[] =

"precision mediump float;                            \n"

"void main()                                         \n"

"{                                                   \n"

"  gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );        \n"

"}                                                   \n";

// Load the shaders and get a linked program object

userData->programObject = esLoadProgram ( vShaderStr, fShaderStr );

// Get the attribute locations

userData->positionLoc = glGetAttribLocation ( userData->programObject, "a_position" );

// Get the uniform locations

userData->mvpLoc = glGetUniformLocation( userData->programObject, "u_mvpMatrix" );

// Generate the vertex data

userData->numIndices = esGenCube( 1.0, &userData->vertices,

NULL, NULL, &userData->indices );

// Starting rotation angle for the cube

userData->angle = 45.0f;

glClearColor ( 0.0f, 0.0f, 0.0f, 0.0f );

return GL_TRUE;

}

void Draw ( ESContext *esContext )

{

UserData *userData = esContext->userData;

// Set the viewport

glViewport ( 0, 0, esContext->width, esContext->height );

// Clear the color buffer

glClear ( GL_COLOR_BUFFER_BIT );

// Use the program object

glUseProgram ( userData->programObject );

// Load the vertex position

glVertexAttribPointer ( userData->positionLoc, 3, GL_FLOAT,

GL_FALSE, 3 * sizeof(GLfloat), userData->vertices );

glEnableVertexAttribArray ( userData->positionLoc );

// Load the MVP matrix

glUniformMatrix4fv( userData->mvpLoc, 1, GL_FALSE, (GLfloat*) &userData->mvpMatrix.m[0][0] );

// Draw the cube

glDrawElements ( GL_TRIANGLES, userData->numIndices, GL_UNSIGNED_SHORT, userData->indices );

}

------------

注意: glGetAttribLocation 及 glVertexAttribPointer;

注意: glGetUniformLocation 及 glUniformMatrix4fv;

时间: 2024-10-27 18:10:05

OpenGLShader 编程系列-属性变量,一致变量的传递的相关文章

OpenGLShader 编程系列 - 查询shader中的Uniforms

GLint maxUniformLen; GLint numUniforms; GLint index; glGetProgramiv(this->_program, GL_ACTIVE_UNIFORMS, &numUniforms); glGetProgramiv(this->_program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &maxUniformLen); GLchar* uniformName = (GLchar*)malloc(sizeof

Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量

Objective-C语言介绍 . Objc与C语言 . 面向对象编程 . 类和对象 . 属性和方法 . 属性和实例变量 1 第一个OC控制台程序 1.1 问题 Xcode是苹果公司向开发人员提供的集成开发环境(非开源),用于开发Mac OS X,iOS的应用程序.其运行于苹果公司的Mac操作系统下. 本案例要求使用集成开发工具Xcode编写OC的HelloWorld程序,在Xcode的控制台中, 1.2 方案 首先,启动集成开发工具Xcode. 然后,创建OC语言的工程. 最后,运行所创建的工

【C/C++多线程编程之八】pthread条件变量

多线程编程之条件变量 Pthread是 POSIX threads 的简称,是POSIX的线程标准. 互斥机制,包括互斥量[C/C++多线程编程之六]pthread互斥量,信号量[C/C++多线程编程之七]pthread信号量,互斥能很好的处理共享资源访问的协调问题,是多线程同步必不可少的机制.互斥机制也有其缺陷,当线程在等待共享资源满足某个条件,互斥机制下,必须不断地加锁和解锁,其间查询共享资源是否满足条件,这将带来巨大的消耗.         此时,需要新的机制来解决这个问题.      

bash脚本编程之变量、变量类型、条件测试、算术运算、及特殊变量

一.学习目的 1.了解bash脚本的变量类型及变量的使用 2.了解bash中条件测试的种类及如何在bash中实现条件的判断 3.学会在bash中做算术运算 4.了解特殊变量的使用 二.学习内容 1). ①.bash的变量类型: 环境变量 .本地变量.局部变量.位置变量.特殊变量 环境变量: export VALUENAME = VALUE 作用领域是当前的shell进程及其子进程 本地变量: VALUENAME= VALUE 作用领域为整个bash的进程 局部变量:local VALUENAME

C语言变量和变量属性

数据类型 数据类型可以理解为固定内存大小的别名. 数据类型是创建变量的模子. 1byte char 2byte short 4byte int 变量本质 变量是一段实际连续存储空间的别名. 程序中通过变量来申请并命名存储空间. 通过变量的名字可以使用存储空间. --------------------------------------------------------------- C语言中的变量可以有自己的属性. 在定义变量的时候可以加上 "属性" 关键字. "属性&q

(转)Objective-C语言--属性和实例变量

本文转自http://blog.csdn.net/addychen/article/details/39525681 使用Objective-C一段时间了,一直没有弄清楚在Objective-C中属性和实例变量,在这里总结一下,Objective-C中先有的实例变量,需要给外部类使用的用@public声明,内部自己使用的用@private或@protect声明.Objective-C添加了属性后,我觉得Apple的考虑应该是,属性用于对外而实力变量主要用于程序内部使用.这样有利于代码的分离,由于

java中获取系统属性以及环境变量

java中获取系统属性以及环境变量 System.getEnv()和System.getProperties()的差别 从概念上讲,系统属性 和环境变量 都是名称与值之间的映射.两种机制都能用来将用户定义的信息传递给 Java 进程.环境变量产生很多其它的全局效应,由于它们不仅对Java 子进程可见,并且对于定义它们的进程的全部子进程都是可见的.在不同的操作系统上,它们的语义有细微的区别,比方,不区分大写和小写.由于这些原因,环境变量更可能有意料不到的副作用.最好在可能的地方使用系统属性.环境变

编程题:用指针变量输出字符串

#include<stdio.h> void main() {  char *string="Hello"; printf("%s\n",string); } 字符串指针变量的介绍: 运行结果: 编程题:用指针变量输出字符串,布布扣,bubuko.com

编程题:展示自动变量在内存中的生存期。

#include<stdio.h> void f(int n) { auto int s=0;  /*auto可以省略*/ s=s+1; printf("No.%d:s=%d\n",n,s); } void main() { int num; for(num=1;num<4;num++) f(num); } 编程题:展示自动变量在内存中的生存期.,布布扣,bubuko.com