Example #1
0
//++++++++++++++++++++++++++++++++++++++++++++++++
//初期化
//--in--------------------------------------------
//頂点シェーダファイル名、
//フラグメントシェーダファイル名
//ジオメトリシェーダ
//--out-------------------------------------------
//
//++++++++++++++++++++++++++++++++++++++++++++++++
void CGLSL::Init(const char* vtx_file, const char* frg_file, const char* geo_file)
{


	//シェーダオブジェクトの作成
	vertexShader = glCreateShader(GL_VERTEX_SHADER);
	fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
	geometoryShader = glCreateShader(GL_GEOMETRY_SHADER);


	//プログラムの作成
	shaderProg = glCreateProgram();

	//読み込みとコンパイル
	if(ReadShaderSource(vertexShader, vtx_file) == S_OK)
	{
		glCompileShader(vertexShader);		//コンパイル
		glAttachShader(shaderProg, vertexShader);	//プログラムに登録
	}
	else
	{
		//エラー処理
	}

	if(ReadShaderSource(fragmentShader, frg_file) == S_OK)
	{
		glCompileShader(fragmentShader);		//コンパイル
		glAttachShader(shaderProg, fragmentShader);	//プログラムに登録
	}
	else
	{
		//エラー処理
	}	
	if(ReadShaderSource(geometoryShader, frg_file) == S_OK)
	{
		glCompileShader(geometoryShader);		//コンパイル
		glAttachShader(shaderProg, geometoryShader);	//プログラムに登録
	}
	else
	{
		//エラー処理
	}
	glProgramParameteriEXT(shaderProg,GL_GEOMETRY_INPUT_TYPE_EXT,GL_POLYGON);
	glProgramParameteriEXT(shaderProg,GL_GEOMETRY_OUTPUT_TYPE_EXT,GL_POLYGON);

	int temp;
	glGetIntegerv(GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT,&temp);
	glProgramParameteriEXT(shaderProg,GL_GEOMETRY_VERTICES_OUT_EXT,temp);

	glLinkProgram(shaderProg);

	tangent = glGetAttribLocation(shaderProg, "tangent");

}
Example #2
0
//set up shader
void setUpShader()
{
	GLchar *vertexData;
	GLchar *fragmentData;
	int size;
	size = ShaderSize(vertexFile);
	vertexData = ReadShaderSource(vertexFile, size);
	size = ShaderSize(fragmentFile);
	fragmentData = ReadShaderSource(fragmentFile, size);

	InstallShaders(programObject, vertexData, fragmentData);

}
Example #3
0
ShaderStage::ShaderStage(const std::string& name, ShaderType type, U32 program)
	: m_name(name)
	, m_type(type)
	, m_program(program)
	, m_shader(0)
	, m_source("")
{
	ReadShaderSource(g_resourceCache.GetShadersPath() + name + s_GLSLExtensions[type]);
	CreateShader();
}
//
//   Read a file's data into a string, and compile it using ShCompile
//
bool CompileFile(char* fileName, ShHandle compiler, int compileOptions)
{
    ShaderSource source;
    if (!ReadShaderSource(fileName, source))
        return false;

    int ret = ShCompile(compiler, &source[0], source.size(), compileOptions);

    FreeShaderSource(source);
    return ret ? true : false;
}
Example #5
0
//++++++++++++++++++++++++++++++++++++++++++++++++
//初期化
//--in--------------------------------------------
//頂点シェーダファイル名、
//フラグメントシェーダファイル名
//--out-------------------------------------------
//
//++++++++++++++++++++++++++++++++++++++++++++++++
void CGLSL::Init(const char* vtx_file, const char* frg_file)
{


	//シェーダオブジェクトの作成
	vertexShader = glCreateShader(GL_VERTEX_SHADER);
	fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);


	//プログラムの作成
	shaderProg = glCreateProgram();

	//読み込みとコンパイル
	if(ReadShaderSource(vertexShader, vtx_file) == S_OK)
	{
		glCompileShader(vertexShader);		//コンパイル
		glAttachShader(shaderProg, vertexShader);	//プログラムに登録
	}
	else
	{
		//エラー処理
	}

	if(ReadShaderSource(fragmentShader, frg_file) == S_OK)
	{
		glCompileShader(fragmentShader);		//コンパイル
		glAttachShader(shaderProg, fragmentShader);	//プログラムに登録
	}
	else
	{
		//エラー処理
	}


	glLinkProgram(shaderProg);
	int linked = 0;
	glGetProgramiv(shaderProg, GL_LINK_STATUS, &linked);
	tangent = glGetAttribLocation(shaderProg, "tangent");
	color = glGetAttribLocation(shaderProg, "color");

}
Example #6
0
File: shader.cpp Project: rokn/GEAR
	GLuint Shader::LoadShader(std::string filename, GLenum shaderType)
	{
		std::string str = ReadShaderSource(filename);
		const GLchar * shaderSource = (const GLchar *)str.c_str();

		GLuint shader = glCreateShader(shaderType);
		glShaderSource(shader, 1, &shaderSource, NULL);
		glCompileShader(shader);

		if (!ShaderIsCompiled(shader))
		{
			PrintShaderInfoLog(shader);
			return 0;
		}

		return shader;
	}
Example #7
0
// Init settings once
void InitRenderingContext(void)
{
	// Culling back face
	glEnable(GL_CULL_FACE);

	// Check depth test
	glEnable(GL_DEPTH_TEST);

	// Background color
	glClearColor(0.2f, 0.2f, 0.2f, 1.0f );

	//--------------------------------------------------------------
	// Create the shader objects
	//--------------------------------------------------------------
	// 1st obj shaders
	vsNormal = glCreateShader(GL_VERTEX_SHADER);
	fsNormal = glCreateShader(GL_FRAGMENT_SHADER);
	// 2nd obj shaders
	vsTexcoord = glCreateShader(GL_VERTEX_SHADER);
	fsTexcoord = glCreateShader(GL_FRAGMENT_SHADER);
  
	//--------------------------------------------------------------
	// Read the shader sources into the shader objects
	//--------------------------------------------------------------
	// 1st obj shaders
	ReadShaderSource(vsNormal,   "Src\\Normal.vs");
	ReadShaderSource(fsNormal,   "Src\\Normal.fs");
	// 2nd obj shaders
	ReadShaderSource(vsTexcoord, "Src\\Texcoord.vs");
	ReadShaderSource(fsTexcoord, "Src\\Texcoord.fs");

	//--------------------------------------------------------------
	// Compile & Link shaders
	//--------------------------------------------------------------
	// 1st obj shaders
	CompileShader(vsNormal, fsNormal, spNormal);
	// 2nd obj shaders
	CompileShader(vsTexcoord, vsTexcoord, spTexcoord);

	//--------------------------------------------------------------
	// Get shader variable locations
	//--------------------------------------------------------------
	// Attributes of 1st obj shader
	locPosition	   = glGetAttribLocation(spNormal, "vPosition");
	locTexcoord	   = glGetAttribLocation(spNormal, "vTexcoord");
	locNormal	   = glGetAttribLocation(spNormal, "vNormal");
	// Uniforms of 1st obj shader
	locMVP		   = glGetUniformLocation(spNormal, "mvpMatrix");
	locMV		   = glGetUniformLocation(spNormal, "mvMatrix");
	locN		   = glGetUniformLocation(spNormal, "nMatrix");
	locLight	   = glGetUniformLocation(spNormal, "vLight");
	// Attributes of 2nd obj shader
	locPosition	   = glGetAttribLocation(spTexcoord, "vPosition");
	locTexcoord	   = glGetAttribLocation(spTexcoord, "vTexcoord");
	locNormal	   = glGetAttribLocation(spTexcoord, "vNormal");
	// Uniforms of 2nd obj shader
	locMVP		   = glGetUniformLocation(spTexcoord, "mvpMatrix");
	locMV		   = glGetUniformLocation(spTexcoord, "mvMatrix");
	locN		   = glGetUniformLocation(spTexcoord, "nMatrix");
	locLight	   = glGetUniformLocation(spTexcoord, "vLight");

	//--------------------------------------------------------------
	// Load OBJ file
	//--------------------------------------------------------------
	g_obj->LoadOBJ("Data\\Dog.obj");

	//--------------------------------------------------------------
	// Create Position Vertex Buffer Object
	//--------------------------------------------------------------
	// Create VBO
	glGenBuffers(1, &bufPosition);
	// Allocate memory space for VBO
	glBindBuffer(GL_ARRAY_BUFFER, bufPosition);
	glBufferData(GL_ARRAY_BUFFER, 3 * sizeof(GLfloat) * g_obj->GetSizeFace(), g_obj->GetAddrPosition(), GL_STATIC_DRAW);
	// Release VBO
	glBindBuffer(GL_ARRAY_BUFFER, 0);

	//--------------------------------------------------------------
	// Create Texcoord Vertex Buffer Object
	//--------------------------------------------------------------
	glGenBuffers(1, &bufTexcoord);
	glBindBuffer(GL_ARRAY_BUFFER, bufTexcoord);
	glBufferData(GL_ARRAY_BUFFER, 2 * sizeof(GLfloat) * g_obj->GetSizeFace(), g_obj->GetAddrTexcoord(), GL_STATIC_DRAW);
	glBindBuffer(GL_ARRAY_BUFFER, 0);

	//--------------------------------------------------------------
	// Create Normal Vertex Buffer Object
	//--------------------------------------------------------------
	glGenBuffers(1, &bufNormal);
	glBindBuffer(GL_ARRAY_BUFFER, bufNormal);
	glBufferData(GL_ARRAY_BUFFER, 3 * sizeof(GLfloat) * g_obj->GetSizeFace(), g_obj->GetAddrNormal(), GL_STATIC_DRAW);
	glBindBuffer(GL_ARRAY_BUFFER, 0);

	//--------------------------------------------------------------
	// Create Index Position Vertex Buffer Object
	//--------------------------------------------------------------
    glGenBuffers(1, &bufIndex);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufIndex);
	glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLuint) * g_obj->GetSizeFace(), g_obj->GetAddrFace(), GL_STATIC_DRAW);
	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}