GLSL inn i C++

Posted by kent at 8 May 2007

Category: c++, Interessant

	void createShaders()
	{
		GLuint program,fragment,vertex; // shader program, fragment, vertex

		vertex = glCreateShader( GL_VERTEX_SHADER );
		fragment = glCreateShader( GL_FRAGMENT_SHADER );

		compileShader("pointlight.frag", fragment);
		compileShader("pointlight.vert", vertex);

		program = glCreateProgram();
		glAttachShader(program, vertex);
		glAttachShader(program, fragment);
		glLinkProgram(program);
		glUseProgram(program);

		programs["default"] = program;

		/*
		assert(NULL);
		ifstream vf, ff;

		char *vs, *fs;
		int count;

		v = glCreateShader(GL_VERTEX_SHADER);
		f = glCreateShader(GL_FRAGMENT_SHADER);

		struct stat fileStat;

		vs = textFileRead("pointlight.vert");
		fs = textFileRead("pointlight.frag");

		glShaderSource(v, 1, (const char **) &vs,NULL);
		glShaderSource(f, 1, (const char **) &fs,NULL);

		free(vs);free(fs);

		glCompileShader(v);
		glCompileShader(f);

		p = glCreateProgram();

		glAttachShader(p,v);
		glAttachShader(p,f);

		glLinkProgram(p);
		glUseProgram(p);
		*/
	}

	void compileShader(char *file, GLuint shader)
	{
		char *source = readShaderFile(file);
		glShaderSource(shader, 1, (const char **) &source , NULL);
		glCompileShader(shader);
		free(source);
	}

	static char *readShaderFile(const char *fn)
	{
		FILE *fp;
		char *content = NULL;

		int count=0;

		if (fn != NULL) {
			fp = fopen(fn,"rt");

			if (fp != NULL) {

				fseek(fp, 0, SEEK_END);
				count = ftell(fp);
				rewind(fp);

				if (count > 0) {
					content = (char *)malloc(sizeof(char) * (count+1));
					count = (int)fread(content,sizeof(char),count,fp);
					content[count] = '';
				}
				fclose(fp);
			}
		}
		return content;
	}
VN:F [1.9.13_1145]
Rating: 0.0/5 (0 votes cast)
Share

No related posts.

Leave a Reply

Leave a Reply
  • (required)
  • (required) (will not be published)