Beispiel #1
0
Texture::Texture(int width, int height, int precision)
{
	Index = 0xFFFE;
	glGenTextures(1, &Index);
  glBindTexture(GL_TEXTURE_2D, Index);
	
	if(PrintGLError() || Index == 0xFFFE)
	{
		Valid = false;
		Index = 0;
		return ;
	}
	
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
	PrintGLError();
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
	PrintGLError();
	
	GLenum format = GL_RGBA;
	if(precision == 16)
		format = GL_RGBA16F_EXT;
	if(precision == 32)
		format = GL_RGBA32F_EXT;
	ImageSize = TextureSize = Vec2I{width, height};
	glTexImage2D(GL_TEXTURE_2D, 0, format, TextureSize.X, TextureSize.Y, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
	PrintGLError();
	
	TextureCoordinates = calcTextureCoordinates(0, ImageSize);
	Valid = true;
}
Beispiel #2
0
void Shutdown() {
    PrintGLError();
    delete fxaaFilter;
    delete fxaaShader;
    delete crate;
    delete deathstroke;
    delete camera;
    delete susane;
    delete diffuseTextureShader;
    delete solidColorShader;
    delete deathstrokeDiffuse;
    PrintGLError();
}
void RenderContext2D::setRenderTarget(RenderTarget* target)
{
	mRenderTarget = target;
	if(target)
		mRenderTarget->bind();
	PrintGLError();
}
Beispiel #4
0
bool Initialize() {
    camera = new Camera(GetWidth(), GetHeight(), Camera::COLOR_DEPTH, 60.0f, float(GetWidth()) / float(GetHeight()), 0.01f, 500.0f);
    deathstrokeDiffuse = new Texture("Assets/Deathstroke_D.png");
    
    crate = new Obj("Assets/Cube.obj");
    susane = new Obj("Assets/Monkey.obj");
    deathstroke = new Obj("Assets/Deathstroke.obj");
    
    solidColorShader = new Shader();
    solidColorShader->SetVertexShaderFromFile("Shaders/solid.vs");
    solidColorShader->SetFragmentShaderFromFile("Shaders/solid.fs");
    solidColorShader->Prepare();
    
    diffuseTextureShader = new Shader();
    diffuseTextureShader->SetVertexShaderFromFile("Shaders/diffuse.vs");
    diffuseTextureShader->SetFragmentShaderFromFile("Shaders/diffuse.fs");
    diffuseTextureShader->Prepare();
    
    fxaaShader = new Shader();
    fxaaShader->SetVertexShaderFromFile("Shaders/fxaa.vs");
    fxaaShader->SetFragmentShaderFromFile("Shaders/fxaa.fs");
    fxaaShader->Prepare();
    
    fxaaFilter = new PostProcess(GetWidth(), GetHeight(), camera->GetRenderTarget(), fxaaShader);
    
    PrintGLError();
    return  true;
}
RenderContext2D::RenderContext2D(RenderTarget* target)
{
	glEnable(GL_BLEND);
	glDisable(GL_CULL_FACE);
	setRenderTarget(target);
	setShader      (mShader);
	PrintGLError();
}
Beispiel #6
0
void Resize(int w, int h) {
    camera->LookAt(camPosition, glm::vec3(0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
    camera->Perspective(60.0f, float(w) / float(h), 0.01f, 500.0f);
    camera->UpdateFrameBuffer(w, h);
    fxaaFilter->Resize(w, h);
    fxaaFilter->SetInput(camera->GetRenderTarget());
    fxaaFilter->SetShader(fxaaShader);
    PrintGLError();
}
Beispiel #7
0
/// Re-instates old shader as needed.
void TextFont::OnEndRender(GraphicsState & graphicsState)
{
	if (shaderBased)
	{
		// Bind 0?
	}
	else 
	{
		glEnd();
	}
	/// enable writing to depth-buffer again.4
	glDepthMask(GL_TRUE);

	PrintGLError("Font.h: Error after rendering error");

}
Beispiel #8
0
int Game::Loop(WindowMgr* windowMgr)
{
	while (!inputMgr->quit)
	{
		time->UpdateTime();
		inputMgr->UpdateInput(time->deltaTime);
		world->UpdateAll(time->deltaTime);

		renderer->RenderAll(windowMgr);

		windowMgr->SwapBuffers();
		PrintGLError();
		SDL_Delay(10);
	}

	return 0;
}
Beispiel #9
0
Texture::Texture(const TextureData& tex)
{
	Index = 0xFFFE;
	glGenTextures(1, &Index);
  glBindTexture(GL_TEXTURE_2D, Index);

	if(PrintGLError() || Index == 0xFFFE)
	{
		Valid = false;
		Index = 0;
		return ;
	}
	
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
	PrintGLError();
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
	PrintGLError();

	ImageSize = Vec2I{tex.Data.Width, tex.Data.Height};
	TextureSize = ImageSize;
	//TextureSize = Vec2I{makePowerOfTwo(width), makePowerOfTwo(height)};

	// TODO: Handle non-dense texture data
	if(!(TextureSize == ImageSize))
	{
		std::vector<uint32_t> empty(TextureSize.X * TextureSize.Y, 0);
		glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, TextureSize.X, TextureSize.Y, 0, GL_RGBA, GL_UNSIGNED_BYTE, empty.data());
		glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, ImageSize.X, ImageSize.Y, GL_RGBA, GL_UNSIGNED_BYTE, tex.Data.DataPtr);
		PrintGLError();
	}
	else
	{
		glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, TextureSize.X, TextureSize.Y, 0, GL_RGBA, GL_UNSIGNED_BYTE, tex.Data.DataPtr);
		PrintGLError();
	}

	glGenerateMipmap(GL_TEXTURE_2D);
	PrintGLError();

	TextureCoordinates = calcTextureCoordinates(0, ImageSize);
	Valid = true;
}
void RenderContext2D::clear(Vec3F clr)
{
	glClearColor(clr.X, clr.Y, clr.Z, 1.f);
	glClear(GL_COLOR_BUFFER_BIT);
	PrintGLError();
}
void RenderContext2D::setShader(ShaderProgram shader)
{
	mShader = shader;
	glUseProgram(mShader.Handle);
	PrintGLError();
}
Beispiel #12
0
bool Update(float dt) {
    PrintGLError();
    return true;
}
Beispiel #13
0
bool TextFont::PrepareForRender()
{
	if (!texture){
		std::cout<<"\nERROR: Texture not allocated in Font::RenderText";
		return false;
	}
	if (!whitened && false){ // Change so whitening process is executed only for those fonts which need it.
		MakeTextureWhite();
	}
	/// Bufferize texture as needed.
	if (texture->glid == -1)
	{
		texture->releaseOnBufferization = false;
		TexMan.BufferizeTexture(texture);
	}

	/// Prepare shader.
	if (shaderBased)
	{
		// Load shader.
		shader = ShadeMan.SetActiveShader("Font");
		if (!shader)
			return false;
		// Enable texture
		glEnable(GL_TEXTURE_2D);
		// Set matrices.
		shader->SetProjectionMatrix(graphicsState->projectionMatrixF);
		shader->SetViewMatrix(graphicsState->viewMatrixF);
		shader->SetModelMatrix(graphicsState->modelMatrixF);
		// Set text color
		glUniform4f(shader->uniformPrimaryColorVec4, color.x, color.y, color.z, color.w);
		
		// set hover state
		glUniform1i(shader->uniformHoveredOver, hoveredOver? 1 : 0);

		// Set some color.. hmm.
		// 		glColor4f(color[0], color[1], color[2], color[3]);
				glEnable(GL_BLEND);
		glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
		// Don't write depth to depth buffer.
		glDepthMask(GL_FALSE);
		glDisable(GL_DEPTH_TEST);

		// Set texture in shader? hm.
		glBindTexture(GL_TEXTURE_2D, texture->glid);

		// Fetch and bufferizes model.
		if (!model)
			model = ModelMan.GetModel("sprite.obj");
		model->BufferizeIfNeeded();
	}
	else 
	{
		// Enable textures if it wasn't already
		glEnable(GL_TEXTURE_2D);
		PrintGLError("Font.h: glEnable(GL_TEXTURE_2D) error");
		/// Set fill mode!
		glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

		ShadeMan.SetActiveShader(0);

		glEnable(GL_TEXTURE_2D);
	//	glEnable(GL_LIGHTING);
		glDisable(GL_COLOR_MATERIAL);
		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
		
		glMatrixMode(GL_PROJECTION);
		glLoadIdentity();
		glLoadMatrixf(graphicsState->projectionMatrixF.getPointer());
		Matrix4f modelView = graphicsState->viewMatrixF * graphicsState->modelMatrixF;
		glMatrixMode(GL_MODELVIEW);
		glLoadMatrixf(modelView.getPointer());
		glColor4f(color[0], color[1], color[2], color[3]);
		glEnable(GL_BLEND);
		glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

		glDisable(GL_LIGHTING);

		// Disable depth test.. lol no?
	//	glDisable(GL_DEPTH_TEST);
		glDepthMask(GL_FALSE);

		glBindTexture(GL_TEXTURE_2D, texture->glid);

				// when texture area is small, bilinear filter the closest mipmap
		// when texture area is large, bilinear filter the original
		bool linear = false;
		if (linear){
			glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
			glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
		}
		else {
			glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
			glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
		}


	//	glUseProgram(shader->shaderProgram);
		/// Begin the QUADS!
		glBegin(GL_QUADS);
	}

	return true;
}