OpenGLES---画一个矩形

{目录
	RectShader  
	RectWin  窗口
	画东西的几种类型
	引用Shader中的属性(自己在Shader中写的一些需要传值的类型) glGetU/A...
	设置Shader数据(Shader什么类型就用什么类型设置内容) glU/V...
}

-- RectShader

#include <gles2/gl2.h>
#include <assert.h>

typedef     int uniform;
typedef     int attribute;
typedef		int location; 


class ShaderId
{
public:
	ShaderId(){id=-1;};
public:
	int id;
}; 

class ShaderVeual
{
public:
	ShaderVeual(){_programId=-1;}
public:
	int  _programId;
	ShaderId  _vertex;
	ShaderId  _fragment;
};

class RectShader
{
public:
	ShaderVeual shaderveual;

	attribute   _position;
	uniform		_color;
	uniform     _MVP;

public :
	RectShader(){
		_position=-1;
		_color=-1;
		_MVP=-1;
	}

	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);
	
	}

	virtual ShaderVeual createProgram( const char* vertex,const char* fragment ){
        ShaderVeual   program;
        bool  error   =   false;
        do{
            if (vertex){
				// 创建Shader (GL_VERTEX_SHADER 顶点Shader,GL_FRAGMENT_SHADER 像素Shader)
                program._vertex.id   = glCreateShader( GL_VERTEX_SHADER );
				//制定shader的源代码
                glShaderSource( program._vertex.id, 1, &vertex, 0 );
				//编译Shader
                glCompileShader( program._vertex.id )
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值