OpenGLES---获取设置Shader值 API

原创 2016年05月31日 11:01:01

{
	引用Shader中的属性(自己在Shader中写的一些需要传值的类型) glGetU/A...
	设置Shader数据(Shader什么类型就用什么类型设置内容) glU/V...
	附加
}

{引用Shader中的属性(自己在Shader中写的一些需要传值的类型) glGetU/A...

	typedef	int attribute;
	typedef	int uniform;

	attribute   _position;
	uniform   	_MVP;
	const char* vs  = {
		...
		"uniform    mat4    _MVP;"
		"attribute  vec2    _position;"
		...
	};

	_MVP		= glGetUniformLocation(shaderValue.pID,"_MVP");
	_position   = glGetAttribLocation(shaderValue.pID, "_position");

... 类似的API

	//获取Shader程序中的属性(attribute)
	glGetAttribLocation (GLuint program, const GLchar* name);
	//获取Shader程序全局(uniform)变量对象
	glGetUniformLocation (GLuint program, const GLchar* name);
}

{设置Shader数据(Shader什么类型就用什么类型设置内容) glU/V...

	CELL::float2 pos[]={//逆时针给坐标点,顺时针会出问题
		CELL::float2(x,y),
		CELL::float2(x,y+h),
		CELL::float2(x+w,y),
		CELL::float2(x+w,y+h)
	};
	...
	glUniformMatrix4fv(shader._MVP,1,false,project.data());
	glVertexAttribPointer(shader._position,2,GL_FLOAT,false,sizeof(CELL::float2),pos);
	...

... 类似的API
	//设置Shader内Uniform变量的值
	glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
	glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
	glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
	
	//设置Shader内Uniform变量的值(值float)
	glUniform1f (GLint location, GLfloat x);
	glUniform1fv (GLint location, GLsizei count, const GLfloat* v); 

	//设置Shader内Uniform变量的值(值int)
	glUniform1i (GLint location, GLint x);
	glUniform1iv (GLint location, GLsizei count, const GLint* v);

	glUniform2f (GLint location, GLfloat x, GLfloat y);
	glUniform2fv (GLint location, GLsizei count, const GLfloat* v);

	glUniform2i (GLint location, GLint x, GLint y);
	glUniform2iv (GLint location, GLsizei count, const GLint* v);

	glUniform3f (GLint location, GLfloat x, GLfloat y, GLfloat z);
	glUniform3fv (GLint location, GLsizei count, const GLfloat* v);

	glUniform3i (GLint location, GLint x, GLint y, GLint z);
	glUniform3iv (GLint location, GLsizei count, const GLint* v);

	glUniform4f (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
	glUniform4fv (GLint location, GLsizei count, const GLfloat* v);

	glUniform4i (GLint location, GLint x, GLint y, GLint z, GLint w);
	glUniform4iv (GLint location, GLsizei count, const GLint* v);

	glVertexAttrib1f (GLuint indx, GLfloat x);
	glVertexAttrib1fv (GLuint indx, const GLfloat* values);

	glVertexAttrib2f (GLuint indx, GLfloat x, GLfloat y);
	glVertexAttrib2fv (GLuint indx, const GLfloat* values);

	glVertexAttrib3f (GLuint indx, GLfloat x, GLfloat y, GLfloat z);
	glVertexAttrib3fv (GLuint indx, const GLfloat* values);

	glVertexAttrib4f (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
	glVertexAttrib4fv (GLuint indx, const GLfloat* values);

	glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr);

}

{附加

uniform   设置这个属性不限于顶点Shader(vs)或片段Shader(fs)
	glUniformMatrix4fv  设置MVP ...
	glUniform4f         设置颜色值 ...

attribute 设置这个属性只限于顶点Shander(vs),假如片段Shader(fs)用的话,只能用varying 传值
	glVertexAttribPointer 设置图片位置 ...

}


/** 获取Shader程序中的 attribute/Uniform 类型
 * @param  program 程序ID
 * @param  name    属性名字
 * @return 
 */
GL_APICALL int GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar* name);
GL_APICALL int GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar* name);


/** 设置Shader数据 顶点数据源
* 指定顶点数据源(位置,法线,uv坐标,副法线,切线...需要绘制的顶点数据都叫属性)
* @param  indx Shader中的属性
* @param  size 数量(位置(x,y,z)数量3,颜色(r,g,b,a)数量4)
* @param  type 数据类型(GL_FLOAT,GL_BYTE, GL_UNSIGNED_BYTE ...)
* @param  normalized 是否规格化 指定当被访问时,固定点数据值是否应该被归一化(GL_TRUE)或者直接转换为固定点值(GL_FALSE)
* @param  stride 偏移量,初始值为0。
* @param  ptr  要传入的数据。初始值为0;
* @return 
*/
GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr);




OpenGLES---设置获取Shader程序属性

{目录 引用Shader中的属性(自己在Shader中写的一些需要传值的类型) glGet.... 设置Shader数据(Shader什么类型就用什么类型设置内容) glU/A... } {引...
  • GameCocos2dx
  • GameCocos2dx
  • 2016年05月26日 13:02
  • 719

OpenGLES---编译Shader程序

1:创建Shader glCreateShader 2:指定Shader源代码 glShaderSource 3:编译Shader glCompileShader 4:获取shader状态 glGet...
  • GameCocos2dx
  • GameCocos2dx
  • 2016年05月26日 12:32
  • 794

[Unity 笔记] 代码中获取和修改GameObject的shader属性

获取方法如下: gameObject.render.materials.GetFloat("propName"); gameObject.render.materials.SetFloat("pro...
  • hunter_hb
  • hunter_hb
  • 2014年09月18日 20:23
  • 5684

shader内置变量

shader内置变量 内置变量都在UnityShaderVariables.cginc文件中声明 变换矩阵 All these matrices arefloat4x4 type. Name ...
  • qingshui37
  • qingshui37
  • 2016年05月16日 11:12
  • 1151

unity开发shader中要用到的内置状态变量(二)

目录(?)[-] Transformations 变换 Lighting 光照 Various 变量 作为对shader的深入了解的第一步,需要了解Unity给了我们什...
  • e295166319
  • e295166319
  • 2016年08月25日 17:29
  • 1024

ShaderAPI

shader
  • gy373499700
  • gy373499700
  • 2017年04月29日 13:02
  • 541

OpenGLES---纹理的API

{目录 //关联纹理层(GL_TEXTURE0 ~ GL_TEXTURE31) glActiveTexture (GLenum texture); //生成纹理 glGenTextures (...
  • GameCocos2dx
  • GameCocos2dx
  • 2016年06月01日 10:16
  • 529

linux下环境变量操作API

由于自己编写操作环境变量比较繁琐
  • u014365378
  • u014365378
  • 2014年07月30日 21:31
  • 306

简单Shader之设置Texture【学习Shader一】

Shader "NlikiStudy/Simple/SetTexture_Nliki" { Properties { _MainTex("Texture",2D)="White"{TexGe...
  • Nliki
  • Nliki
  • 2016年07月07日 15:33
  • 1079

[UnityShader]-理解深度测试

深度测试(ZTest):把当前片元的深度值与已经存在深度缓冲区中的深度值进行比较,未通过测试的片元将被舍弃.例如小于时,舍弃该片元,或者大于时舍弃等.深度测试的比较方式是可配置的.通过深度测试的片元深...
  • u011397120
  • u011397120
  • 2017年03月22日 02:03
  • 363
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenGLES---获取设置Shader值 API
举报原因:
原因补充:

(最多只允许输入30个字)