OpenGLES---Shader初始化

--- 准备工作
	typedef		int uniform;
	typedef		int attribute;
	typedef		int location;
	class ShaderId{
	public:
		ShaderId(){id=-1;};
	public:
		int id;
	}; 
	class ShaderVeual{//编译vs和fs后保存的id
	public:
		ShaderVeual(){_programId=-1;}
	public:
		int  _programId;
		ShaderId  _vertex;
		ShaderId  _fragment;
	};

成员属性
	ShaderVeual shaderveual;
	attribute   _position;
	uniform		_color;
	uniform     _MVP;
成员函数
	void shaderInit(){
		const char* vs  = {
			"precision  lowp float;"//制定float的精度(lowp低精度)
			"uniform    mat4    _MVP;"
			"attribute  vec2    _position;"
			"void main()"
			"{"
			"   vec4    pos =   vec4(_position,0,1);"
			"   gl_Position =   _MVP * pos;"
			"}"
		};
		const char* ps  = {
			"precision lowp float;"
			"uniform    vec4   _color;"
			"void main()"
			"{"
			"   gl_FragColor    =  _color;"
			"}"
		};
		shaderveual=createProgram(vs,ps);
		//获取属性的位置
		_position   = glGetAttribLocation(shaderveual._programId, "_position");
		_color		= glGetUniformLocation(shaderveual._programId,"_color");
		_MVP        = glGetUniformLocation(shaderveual._programId,"_MVP");
	}
	void begin(){
		glUseProgram(shaderveual._programId);//使用程序
		glEnableVertexAttribArray(_position);//启用顶点数组
	}
	void end(){
		glDisableVertexAttribArray(_position);//禁用顶点数组
		glUseProgram(0);// 使用完成
	}
调用
	bool ini(){
		shader.shaderInit();
		return true;
	}

	void renderer() {
		//清楚缓冲
		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
		//设置视口的大小
		glViewport(0,0,_width,_height);

		CELL::matrix4 project=CELL::ortho<float>(0,(float)_width,(float)_height,0,-100,100);
		//CELL::matrix4 project=CELL::lookAt(CELL::float3(0,0,5),CELL::float3(0,0,0),CELL::float3(0,1,0));
		shader.begin();
			float x=100,y=200,w=50,h=50;
			CELL::float2 pos[]={//逆时针给坐标点,顺时针会出问题
				CELL::float2(x,y),
				CELL::float2(x,y+h),
				CELL::float2(x+w,y),
				CELL::float2(x+w,y+h)
			};
			/** 给Uniform变量赋值
			* @param location 变量
			* @param count 数据类型个数
			* @param transpose 是否转置(true,false)
			* @param value 赋值数据
			*/
			glUniformMatrix4fv(shader._MVP,1,false,project.data());
			//给Uniform变量赋值
			glUniform4f(shader._color,1,0,0,1);

			/** 设置顶点属性
			* @param indx 属性id
			* @param size 值数量(2,3,4) 
			* @param type 数据类型 (GL_UNSIGNED_BYTE,GL_FLOAT...)
			* @param normalized  规格化(false,true)
			* @param stride 偏移量(数据的偏移量)
			* @param ptr  数据
			*/
			glVertexAttribPointer(shader._position,2,GL_FLOAT,false,sizeof(CELL::float2),pos);
			glDrawArrays(GL_TRIANGLE_STRIP,0,4);
		shader.end();
		eglSwapBuffers(_display,_surface);
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值