Beispiel #1
0
void FBO::createRenderTarget(std::string textureName){
	chkGLErr();
	bind();
	auto texID = Texture::createTextureID(textureName);
	glBindTexture(GL_TEXTURE_2D, texID);
	chkGLErr();
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	chkGLErr();
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
	chkGLErr();
	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,  _size.x, _size.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
	chkGLErr();
	glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0+_renderTargets.size(), GL_TEXTURE_2D, texID, 0);
	chkGLErr();
	
	chkGLErr();
	_renderTargets.push_back(GL_COLOR_ATTACHMENT0+_renderTargets.size());
	_textures.push_back(texID);
	chkGLErr();

	unbind();
	LOG_INFO("Render target " << textureName << " created with size" << _size);
}
Beispiel #2
0
void Light::set(){
	
	chkGLErr();
	int light = GL_LIGHT0+_id;
	glEnable(light);chkGLErr();

	glLightfv(light, GL_AMBIENT, glm::value_ptr(_ambientColor));chkGLErr();
	glLightfv(light, GL_DIFFUSE, glm::value_ptr(_diffuseColor));chkGLErr();
	glLightfv(light, GL_SPECULAR, glm::value_ptr(_specularColor));chkGLErr();
	
	
	chkGLErr();
/*
	glLightf(light, GL_CONSTANT_ATTENUATION,   _attenuation.x);
	glLightf(light, GL_LINEAR_ATTENUATION,     _attenuation.y);
	glLightf(light, GL_QUADRATIC_ATTENUATION,  _attenuation.z);*/

	glLightfv(light, GL_POSITION, glm::value_ptr(_position));
	
	chkGLErr();
	
	glLightf(light, GL_SPOT_CUTOFF, _spotCutOff);
	glLightf(light, GL_SPOT_EXPONENT, _spotExponent);
	glLightfv(light, GL_SPOT_DIRECTION,  glm::value_ptr(_spotDirection));
	
	chkGLErr();
}
void resize(int width,int height){
	chkGLErr();
	glMatrixMode(GL_PROJECTION);
	chkGLErr();
	
	winSize.x = width;
	winSize.y = height;
	glLoadMatrixf(glm::value_ptr(glm::ortho(0.f,1.f,0.f,1.f)));
	chkGLErr();
	

	glMatrixMode(GL_MODELVIEW);
	glViewport(0,0,width,height);
	chkGLErr();
}
int main( int argc, char* argv[] )
{
	if (glfwInit() != GL_TRUE){
		std::cout << "Could not init glfw"<< std::endl;
		return 2;
	}

	if (glfwOpenWindow(600, 600, 8, 8, 8, 8, 32, 0, GLFW_WINDOW) != GL_TRUE){
		std::cout << "Could not create window"<< std::endl;
		return 3;
	}
	glfwSetWindowTitle ("rGraphicsLibrary - Game of Life");

	if(glewInit() != GLEW_OK)
	{
		std::cerr << "Failed to init glew" << std::endl;
		exit(1);
	}
	chkGLErr();
	std::cout << "OpenGL Version: " << OpenGLInfo::getOpenGLVersion() << std::endl;
	std::cout << "Glew   Version: " << OpenGLInfo::getGlewVersion()   << std::endl;
	std::cout << "GLSL   Version: " << OpenGLInfo::getGLSLVersion()   << std::endl;
	std::cout << "OpenGL Vendor: "  << OpenGLInfo::getOpenGLVendor()   << std::endl;
	std::cout << "OpenGL Renderer: "<< OpenGLInfo::getOpenGLRenderer()   << std::endl;
	chkGLErr();

	init();

	glfwSetWindowSizeCallback(GLFWwindowsizefun(resize));

	while(true){
		if (glfwGetKey(GLFW_KEY_ESC) == GLFW_PRESS)
			break;
		evolve();
		draw();

		glfwSleep(0.5);
		
	}
	return 0;
}
Beispiel #5
0
void FBO::init(std::string depthTexName){
	chkGLErr();
	if(_isInit) return;
	_isInit = true;
	

	_depthTex = Texture::createTextureID(depthTexName);
	glBindTexture(GL_TEXTURE_2D, _depthTex);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

	glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);

	glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, _size.x, _size.y, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0);
	
	glBindTexture(GL_TEXTURE_2D, 0);
	chkGLErr();


	glGenFramebuffersEXT(1, &_fbo);
	bind();
	
	glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT,  GL_TEXTURE_2D, _depthTex, 0);
	fboerror();

	
	unbind();
	
	chkGLErr();

	LOG_INFO("FBO initzilized with size " << _size << " and depth buffer " << depthTexName);

}
void draw(){
	chkGLErr();
	glClear(GL_COLOR_BUFFER_BIT);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	glScalef(1.0f/winSize.x,1.0f/winSize.y,0);
	
	float dx = winSize.x / (float) dim.x;
	float dy = winSize.y / (float) dim.y;
	glBegin(GL_QUADS);
	glColor3f(1,1,0);
	for(int x = 0;x<dim.x;x++)for(int y = 0;y<dim.y;y++)if(grid[x][y]){
		glVertex2f(x*dx,y*dy);	
		glVertex2f(x*dx+dx,y*dy);	
		glVertex2f(x*dx+dx,y*dy+dy);	
		glVertex2f(x*dx,y*dy+dy);	
	}
	glEnd();



	glfwSwapBuffers();
	chkGLErr();
}
void init(){
	chkGLErr();
	glClearColor(0,0,0,0);
	
	grid = new bool*[dim.x];
	tmpGrid = new bool*[dim.x];
	for(int i = 0;i<dim.x;i++){
		grid[i] = new bool[dim.y];
		tmpGrid[i] = new bool[dim.y];
		for(int j = 0;j<dim.y;j++){
			grid[i][j] = false; //rand() % 100 < 10;
			tmpGrid[i][j] = false;
		}
	}
	
	int o = 5;
	grid[4+o][1+o] = true;
	grid[5+o][1+o] = true;
	grid[8+o][1+o] = true;
	grid[9+o][1+o] = true;
	grid[10+o][1+o] = true;
	
	grid[1+o][2+o] = true;
	grid[2+o][2+o] = true;
	grid[3+o][2+o] = true;
	grid[5+o][2+o] = true;
	grid[7+o][2+o] = true;
	grid[9+o][2+o] = true;
	grid[10+o][2+o] = true;
	
	grid[1+o][3+o] = true;
	grid[2+o][3+o] = true;
	grid[3+o][3+o] = true;
	grid[4+o][3+o] = true;
	grid[5+o][3+o] = true;
	grid[8+o][3+o] = true;
	grid[9+o][3+o] = true;
	grid[10+o][3+o] = true;
	
	grid[1+o][4+o] = true;
	grid[3+o][4+o] = true;
	grid[5+o][4+o] = true;
	grid[7+o][4+o] = true;
	grid[9+o][4+o] = true;
	grid[11+o][4+o] = true;
	
	grid[2+o][5+o] = true;
	grid[4+o][5+o] = true;
	grid[6+o][5+o] = true;
	grid[8+o][5+o] = true;
	grid[9+o][5+o] = true;
	grid[10+o][5+o] = true;
	grid[11+o][5+o] = true;

	
	grid[5+o][6+o] = true;
	grid[6+o][6+o] = true;
	grid[7+o][6+o] = true;


	grid[1+o][7+o] = true;
	grid[2+o][7+o] = true;
	grid[3+o][7+o] = true;
	grid[4+o][7+o] = true;
	grid[6+o][7+o] = true;
	grid[8+o][7+o] = true;
	grid[10+o][7+o] = true;
	
	grid[1+o][8+o] = true;
	grid[3+o][8+o] = true;
	grid[5+o][8+o] = true;
	grid[7+o][8+o] = true;
	grid[9+o][8+o] = true;
	grid[11+o][8+o] = true;
	
	grid[2+o][9+o] = true;
	grid[3+o][9+o] = true;
	grid[4+o][9+o] = true;
	grid[7+o][9+o] = true;
	grid[8+o][9+o] = true;
	grid[9+o][9+o] = true;
	grid[10+o][9+o] = true;
	grid[11+o][9+o] = true;
	
	grid[2+o][10+o] = true;
	grid[3+o][10+o] = true;
	grid[5+o][10+o] = true;
	grid[7+o][10+o] = true;
	grid[9+o][10+o] = true;
	grid[10+o][10+o] = true;
	grid[11+o][10+o] = true;
	
	grid[2+o][11+o] = true;
	grid[3+o][11+o] = true;
	grid[4+o][11+o] = true;
	grid[7+o][11+o] = true;
	grid[8+o][11+o] = true;
	

	chkGLErr();
}