Beispiel #1
0
void Shader::initGLSL(const char *vertexFile, const char *fragmentFile)
{
	//glewの初期化
	GLenum err = glewInit();
	if (err != GLEW_OK){
		printf("Error: %s\n", glewGetErrorString(err));
	}
	// GPU,OpenGL情報
	printf("VENDOR= %s \n", glGetString(GL_VENDOR));
	printf("GPU= %s \n", glGetString(GL_RENDERER));
	printf("OpenGL= %s \n", glGetString(GL_VERSION));
	printf("GLSL= %s \n", glGetString(GL_SHADING_LANGUAGE_VERSION));
	//シェーダーオブジェクトの作成
	vertexShader = glCreateShader(GL_VERTEX_SHADER);
	fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
	//シェーダーの読み込みとコンパイル
	readShaderCompile(vertexShader, vertexFile);
	readShaderCompile(fragmentShader, fragmentFile);
	// プログラムオブジェクトの作成
	program = glCreateProgram();
	// シェーダオブジェクトをシェーダプログラムに関連付ける
	glAttachShader(program, vertexShader);
	glAttachShader(program, fragmentShader);
	// シェーダオブジェクトの削除
	glDeleteShader(vertexShader);
	glDeleteShader(fragmentShader);
	// シェーダプログラムのリンク
	link(program);
}
Beispiel #2
0
void Shader::initGLSL(const char *vertexFile)
{
	// GPU,OpenGL情報
	printf("VENDOR= %s \n", glGetString(GL_VENDOR));
	printf("GPU= %s \n", glGetString(GL_RENDERER));
	printf("OpenGL= %s \n", glGetString(GL_VERSION));
	printf("GLSL= %s \n", glGetString(GL_SHADING_LANGUAGE_VERSION));
	//シェーダーオブジェクトの作成
	vertexShader = glCreateShader(GL_VERTEX_SHADER);
	//シェーダーの読み込みとコンパイル
	readShaderCompile(vertexShader, vertexFile);
	// シェーダプログラムの作成
	program = glCreateProgram();
	// シェーダオブジェクトをシェーダプログラムに関連付ける
	glAttachShader(program, vertexShader);
	// シェーダオブジェクトの削除
	glDeleteShader(vertexShader);
	// シェーダプログラムのリンク
	link(program);
}
Beispiel #3
0
int main(int argc, char *argv[]){
	GLenum glResult;
	GLFWwindow *pWindow = NULL;
	GLuint program,linked;
	
	if(!glfwInit()){
		return 0;
	}
	
	pWindow = glfwCreateWindow(640, 480, "Triangle", NULL, NULL);

	glfwMakeContextCurrent(pWindow);

	glResult = glewInit();
	if(glResult != GLEW_OK){
		printf("Error: %s\n", glewGetErrorString(glResult));
		return 0;
	}

	printf("VENDOR=%s\n", glGetString(GL_VENDOR));
	printf("GPU=%s\n", glGetString(GL_RENDERER));
	printf("OpenGL=%s\n", glGetString(GL_VERSION));
	printf("GLSL=%s\n", glGetString(GL_SHADING_LANGUAGE_VERSION));
	
	s_vertexShader = glCreateShader(GL_VERTEX_SHADER);
	printf("s_vertexShader = %d\n", s_vertexShader);

	readShaderCompile(s_vertexShader, "triangle.vert");

	program = glCreateProgram();
	if(program == 0){
		printf("Failed to create program\n");
		goto error_destroy_window;
	}

	glAttachShader(program, s_vertexShader);
	glLinkProgram(program);
	glGetProgramiv(program, GL_LINK_STATUS, &linked);

	if(linked == GL_FALSE){
		char *pInfoLog;
		GLsizei size,len;
		printf("failed to link shader\n");
		glGetProgramiv( program, GL_INFO_LOG_LENGTH, &size );
		if ( size > 0 ) 
		{
			pInfoLog = (char *)malloc(size);
			glGetProgramInfoLog( program, size, &len, pInfoLog );
			printf("%s\n",pInfoLog);
			free(pInfoLog);
		}	
	}
	
	while(!glfwWindowShouldClose(pWindow)){
		glClear(GL_COLOR_BUFFER_BIT);

		glUseProgram(program);
		glBegin(GL_TRIANGLES);
		glColor3d(1.0, 0.0, 0.0);
		glVertex2d(0.9*cos(0.0), 0.9*sin(0.0));
		glColor3d(0.0, 1.0, 0.0);
		glVertex2d(0.9*cos(2.0*M_PI/3.0), 0.9*sin(2.0*M_PI/3.0));
		glColor3d(0.0, 0.0, 1.0);
		glVertex2d(0.9*cos(2.0*M_PI*2.0/3.0), 0.9*sin(2.0*M_PI*2.0/3.0));
		glEnd();
		glUseProgram(0);
		glFlush();
		glfwSwapBuffers(pWindow);
		glfwPollEvents();
	}

	glDeleteProgram(program);
	
 error_destroy_window:
	glfwDestroyWindow(pWindow);

	glDeleteShader(s_vertexShader);
	
 error_exit:	
	glfwTerminate();
	return 0;
}