コード例 #1
0
ファイル: 004.c プロジェクト: welford/opengles_examples
//static variables 
GLuint ab=0;	

#define BUFFER_OFFSET(i) ((char *)NULL + (i))

int main ()
{
	int i=0;
	int ab=0;
	float clr[3] = {0.0f, 0.3f, 0.6f};
	float add[3] = {0.001f, 0.002f, 0.003f};
	unsigned int position_attrib_idx = 0;

	//GL stuff
	SShader vertexShader;
	SShader fragmentShader;
	SShaderProgram program;

	CPlatform platform;
	Create(&platform, "", 2, 1, 1024, 768, 8, 8, 8, 8, 16, 8, 0);	

	//-------------------
	//setup the shaders
	CreateShader(&vertexShader, VERT, &pVertexShader, 1);	
	CreateShader(&fragmentShader, FRAG, &pFragmentShader, 1);	
	
	CreateShaderProgram(&program);
	AddShaderToProgram(&program, &vertexShader);
	AddShaderToProgram(&program, &fragmentShader);
	SetAttributeLocation(&program, position_attrib_idx, "position");	//needs to be calleb before linking
	LinkShaderProgram(&program);	
	
	glGenBuffers(1, &ab);		//array buffer	
	//fill buffers
	glBindBuffer(GL_ARRAY_BUFFER, ab);
	glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

	//-------------------
	//tell openGL how to interperet the data
	glBindBuffer(GL_ARRAY_BUFFER, ab);
	glEnableVertexAttribArray(0);	
	glVertexAttribPointer(position_attrib_idx, 3, GL_FLOAT, GL_FALSE, 12, 0);

	//set rendering states
	glEnable(GL_CULL_FACE);	
	glClearColor(0, 0, 0, 0.0f); //alpha to 0, should make triangle appear over console
	Start(&program); //even when glDeleteProgram is called the program won't be deleted until it is out of use
	while (!IS_BUTTON_PRESSED(platform.m_keyboard.key[KB_ESC]))
	{
		Tick(&platform);
		glClear(GL_COLOR_BUFFER_BIT);
		SetVec3ByName(&program, "uColour", clr);
		glDrawArrays( GL_TRIANGLES, 0, 3);	
		SwapBuffers(&platform);

		for(i=0;i<3;i++)
		{
			clr[i]+=add[i];
			if(clr[i]>1.0f)add[i]*=-1.0f;		
			if(clr[i]<0.0f)add[i]*=-1.0f;
		}
	}
	Stop();	
コード例 #2
0
ファイル: modern_gl_port_map.c プロジェクト: Nekrofage/qurp
static void SetupShaders(void){
	int got = 0;
	SShader vtxTxShdr, frgTxShdr;
	SShader vtxClrShdr, frgClrShdr;
	SShader vtxLightShdr, frgLightShdr;
	const char *pDVertStr[3] = {0,0,0}, *pDFragStr[3] = {0,0,0};

	glswInit();
	glswSetPath("./id1/shaders/", ".glsl");

	glswAddDirectiveToken("Shared", HASH_DEFINE_VALUE(TRANSFORM_UBO_BINDING));
	glswAddDirectiveToken("Shared", HASH_DEFINE_VALUE(LIGHT_UBO_BINDING));
	glswAddDirectiveToken("Shared", HASH_DEFINE_VALUE(MAX_DIRECTION_LIGHTS));
	glswAddDirectiveToken("Shared", HASH_DEFINE_VALUE(MAX_POINT_LIGHTS));
	glswAddDirectiveToken("Shared", HASH_DEFINE_VALUE(MAX_SPOT_LIGHTS));
	glswAddDirectiveToken("Shared", HASH_DEFINE_VALUE(TEXT_TEX_UNIT));

	glswAddDirectiveToken("Vertex", HASH_DEFINE_VALUE(POSITION_LOCATION));
	glswAddDirectiveToken("Vertex", HASH_DEFINE_VALUE(COLOUR_LOCATION));
	glswAddDirectiveToken("Vertex", HASH_DEFINE_VALUE(NORMAL_LOCATION));	
	glswAddDirectiveToken("Vertex", HASH_DEFINE_VALUE(JOINT_WEIGHT_LOCATION));		
	glswAddDirectiveToken("Vertex", HASH_DEFINE_VALUE(JOINT_INDEX_LOCATION));
	glswAddDirectiveToken("Vertex", HASH_DEFINE_VALUE(UV_LOCATION0));
	glswAddDirectiveToken("Vertex", HASH_DEFINE_VALUE(UV_LOCATION1));
	glswAddDirectiveToken("Vertex", HASH_DEFINE_VALUE(TEXT_LOCATION));

	//glswAddDirectiveToken("Shared", HASH_DEFINE_VALUE(SKINNING_TEXTURE_BINDING));
	//glswAddDirectiveToken("Shared", HASH_DEFINE_VALUE(WEIGHTS_PER_VERTEX));	
	//glswAddDirectiveToken("Shared", HASH_DEFINE(TEXTURE_BUFFER_SKINNING));	
	//glswAddDirectiveToken("Shared", HASH_DEFINE_VALUE(RESERVED_JOINTS));

	//shader (TEXTURED)
	got = glswGetShadersAlt("shaders.Header.Vertex+shaders.Shared+shaders.SimpleVertexTextured", pDVertStr, 3);	
	CreateShader(&vtxTxShdr, VERT, pDVertStr, got);
	got = glswGetShadersAlt("shaders.Header.Fragment+shaders.Shared+shaders.SimpleFragmentTextured", pDFragStr, 3);
	CreateShader(&frgTxShdr, FRAG, pDFragStr, got);
	CreateShaderProgram(&texture_shader);
	AddShaderToProgram(&texture_shader,&vtxTxShdr);
	AddShaderToProgram(&texture_shader,&frgTxShdr);
	LinkShaderProgram(&texture_shader);	

	//shader (COLOUR)
	got = glswGetShadersAlt("shaders.Header.Vertex+shaders.Shared+shaders.SimpleVertexColoured", pDVertStr, 3);	
	CreateShader(&vtxClrShdr, VERT, pDVertStr, got);
	got = glswGetShadersAlt("shaders.Header.Fragment+shaders.Shared+shaders.SimpleFragmentColoured", pDFragStr, 3);
	CreateShader(&frgClrShdr, FRAG, pDFragStr, got);
	CreateShaderProgram(&colour_shader);
	AddShaderToProgram(&colour_shader,&vtxClrShdr);
	AddShaderToProgram(&colour_shader,&frgClrShdr);
	LinkShaderProgram(&colour_shader);	

	//shader (LIGHTMAP)
	got = glswGetShadersAlt("shaders.Header.Vertex+shaders.Shared+shaders.SimpleVertexLightmap", pDVertStr, 3);	
	CreateShader(&vtxLightShdr, VERT, pDVertStr, got);
	got = glswGetShadersAlt("shaders.Header.Fragment+shaders.Shared+shaders.SimpleFragmentLightmap", pDFragStr, 3);
	CreateShader(&frgLightShdr, FRAG, pDFragStr, got);
	CreateShaderProgram(&light_map_shader);
	AddShaderToProgram(&light_map_shader, &vtxLightShdr);
	AddShaderToProgram(&light_map_shader, &frgLightShdr);
	LinkShaderProgram(&light_map_shader);	

	//this will delete them after we have deleted the program associated with them
	DeleteShader(&vtxTxShdr);
	DeleteShader(&frgTxShdr);	
	DeleteShader(&vtxClrShdr);
	DeleteShader(&frgClrShdr);	
	DeleteShader(&vtxLightShdr);
	DeleteShader(&frgLightShdr);
}