Beispiel #1
0
int main(int argc, char** argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH);
	glutInitWindowPosition(100,100);
	glutInitWindowSize(RENDER_WIDTH,RENDER_HEIGHT);
	glutCreateWindow("GLSL Shadow mapping");
	
	// This call will grab openGL extension function pointers.
	// This is not necessary for macosx and linux
#ifdef _WIN32
	getOpenGLFunctionPointers();
#endif
	generateShadowFBO();
	loadShadowShader();
	
	// This is important, if not here, FBO's depthbuffer won't be populated.
	glEnable(GL_DEPTH_TEST);
	glClearColor(0,0,0,1.0f);
	
	glEnable(GL_CULL_FACE);
	
	glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
	
	
	
	
	glutDisplayFunc(renderScene);
	glutIdleFunc(renderScene);
	
	glutKeyboardFunc(processNormalKeys);
	
	glutMainLoop();
}
Beispiel #2
0
	SDL_RenderTarget* Create_pBuffer(unsigned int width, unsigned int height){
		
		printf("Create_pBuffer(%ud,%ud);\n",width,height);

		#ifdef _WIN32
		if (!windowsOpenGLInitialized){
			getOpenGLFunctionPointers();
			windowsOpenGLInitialized=1;
		}
		#elif defined(__linux__)
		initializeGLEW();
		#endif

		GLuint textureId;
		glGenTextures(1, &textureId);
		glBindTexture(GL_TEXTURE_2D, textureId);
		glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
		glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
		//glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
		//glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
		//glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); // automatic mipmap
		glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0,GL_RGBA, GL_UNSIGNED_BYTE, 0);

		// create a framebuffer object
		GLuint fboId;
		glGenFramebuffers(1, &fboId);
		glBindFramebuffer(GL_FRAMEBUFFER, fboId);

		// attach the texture to FBO color attachment point
		glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D, textureId, 0);
		int attachError = glGetError();
		if (attachError != GL_NO_ERROR){
			switch(attachError){
				printf("error in glFramebufferTexture2D.\n");
			}
		}
		GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
		if(status != GL_FRAMEBUFFER_COMPLETE){
			printf("An error occured creating the pBuffer.\n");
			switch (status)
			{
				case GL_FRAMEBUFFER_UNDEFINED : printf("GL_FRAMEBUFFER_UNDEFINED \n"); break ;
				case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT  : printf("GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT  \n"); break ;
				case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT  : printf("GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT  \n"); break ;
				case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER  : printf("GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER  \n"); break ;
				case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER  : printf("GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER  \n"); break ;
				case GL_FRAMEBUFFER_UNSUPPORTED  : printf("GL_FRAMEBUFFER_UNSUPPORTED  \n"); break ;
				case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE  : printf("GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE  \n"); break ;
				//case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE  : printf("GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE  \n"); break ;
				//case GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS   : printf("GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS   \n"); break ;
				default: printf("error code unknow: %d",status);
			}
		}

		renderBuffers[renderBuffersCounter].fboID = fboId;
		renderBuffers[renderBuffersCounter].textureID = textureId;
		renderBuffers[renderBuffersCounter].w = width;
		renderBuffers[renderBuffersCounter].h = height;
		renderBuffers[renderBuffersCounter].id = renderBuffersCounter;
		renderBuffersCounter++;

		
		glBindFramebuffer(GL_FRAMEBUFFER, 0);

		printf("pBuffer created ID= %d.\n",renderBuffers[renderBuffersCounter-1].id);
		return &renderBuffers[renderBuffersCounter-1].id;
	}