Fixed texture units' issue

dev
Shariq Shah 9 years ago
parent 1698de9ff2
commit 84ff35053c
  1. 13
      assets/shaders/fbo.frag
  2. 1
      assets/shaders/unshaded.frag
  3. 4
      orgfile.org
  4. 3
      src/game.c
  5. 60
      src/renderer.c

@ -4,10 +4,17 @@ in vec2 uv;
out vec4 frag_color; out vec4 frag_color;
uniform sampler2D sampler; //uniform sampler2D sampler;
uniform sampler2D albedo_map;
uniform sampler2D position_map;
uniform sampler2D normal_map;
uniform sampler2D uv_map;
void main() void main()
{ {
frag_color = texture2D(sampler, uv); //frag_color = texture2D(sampler, uv);
//frag_color = vec4(1, 0, 0, 1); frag_color = texture(albedo_map, uv);
frag_color = texture(position_map, uv);
frag_color = texture(normal_map, uv);
frag_color = texture(uv_map, uv);
} }

@ -20,5 +20,4 @@ void main()
// gbuffer[1] = vertex.xyz; // gbuffer[1] = vertex.xyz;
// gbuffer[2] = normal.xyz; // gbuffer[2] = normal.xyz;
// gbuffer[3] = vec3(uv, 0.0); // gbuffer[3] = vec3(uv, 0.0);
//frag_color = vec4(1, 0, 0, 1);
} }

@ -70,7 +70,9 @@ All the code in this repository is under GPLv3, see LICENSE for more information
** DONE Materials with textures ** DONE Materials with textures
- State "DONE" from "TODO" [2015-10-15 Thu 21:21] - State "DONE" from "TODO" [2015-10-15 Thu 21:21]
** TODO Lights! ** TODO Lights!
** TODO Fix problems with texture units ** DONE Fix problems with texture units
- State "DONE" from "TODO" [2016-05-30 Mon 00:57]
** TODO Draw light volumes
** TODO Fix problems with frustrum culling ** TODO Fix problems with frustrum culling
** TODO 2d drawing routines ** TODO 2d drawing routines
** TODO Gui ** TODO Gui

@ -21,6 +21,7 @@
#include "texture.h" #include "texture.h"
#include "material.h" #include "material.h"
#include "framebuffer.h" #include "framebuffer.h"
#include "light.h"
void run(void); void run(void);
void update(float dt); void update(float dt);
@ -44,6 +45,7 @@ void game_init(void)
geom_init(); geom_init();
renderer_init(window); renderer_init(window);
transform_init(); transform_init();
light_init();
camera_init(); camera_init();
material_init(); material_init();
model_init(); model_init();
@ -304,6 +306,7 @@ void game_cleanup(void)
model_cleanup(); model_cleanup();
material_cleanup(); material_cleanup();
geom_cleanup(); geom_cleanup();
light_cleanup();
transform_cleanup(); transform_cleanup();
camera_cleanup(); camera_cleanup();
input_cleanup(); input_cleanup();

@ -75,11 +75,11 @@ void renderer_init(GLFWwindow* window)
NULL); NULL);
texture_set_param(def_albedo_tex, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); texture_set_param(def_albedo_tex, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
texture_set_param(def_albedo_tex, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); texture_set_param(def_albedo_tex, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
texture_set_param(def_albedo_tex, GL_TEXTURE_MIN_FILTER, GL_LINEAR); texture_set_param(def_albedo_tex, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
texture_set_param(def_albedo_tex, GL_TEXTURE_MAG_FILTER, GL_LINEAR); texture_set_param(def_albedo_tex, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
def_position_tex = texture_create("def_position_texture", def_position_tex = texture_create("def_position_texture",
TU_DIFFUSE, TU_SHADOWMAP1,
width, height, width, height,
GL_RGB, GL_RGB,
GL_RGB16F, GL_RGB16F,
@ -91,7 +91,7 @@ void renderer_init(GLFWwindow* window)
texture_set_param(def_position_tex, GL_TEXTURE_MAG_FILTER, GL_LINEAR); texture_set_param(def_position_tex, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
def_normal_tex = texture_create("def_normal_texture", def_normal_tex = texture_create("def_normal_texture",
TU_DIFFUSE, TU_SHADOWMAP2,
width, height, width, height,
GL_RGB, GL_RGB,
GL_RGB16F, GL_RGB16F,
@ -103,7 +103,7 @@ void renderer_init(GLFWwindow* window)
texture_set_param(def_normal_tex, GL_TEXTURE_MAG_FILTER, GL_LINEAR); texture_set_param(def_normal_tex, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
def_uv_tex = texture_create("def_uv_texture", def_uv_tex = texture_create("def_uv_texture",
TU_DIFFUSE, TU_SHADOWMAP3,
width, height, width, height,
GL_RGB, GL_RGB,
GL_RGB16F, GL_RGB16F,
@ -174,34 +174,54 @@ void renderer_draw(void)
int width, height; int width, height;
window_get_size(&width, &height); window_get_size(&width, &height);
//glViewport(0, 0, width, height); glViewport(0, 0, width, height);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_BLEND); glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
shader_bind(fbo_shader); shader_bind(fbo_shader);
struct Camera* primary_camera = camera_get_primary();
//texture_bind(primary_camera->render_tex); shader_set_uniform_int(fbo_shader, "albedo_map", (GL_TEXTURE0 + TU_DIFFUSE) - GL_TEXTURE0);
glViewport(0, height / 2, width / 2, height / 2);
texture_bind(def_albedo_tex); texture_bind(def_albedo_tex);
geom_render(quad_geo);
texture_unbind(def_albedo_tex);
glViewport(width / 2, height / 2, width / 2, height / 2); shader_set_uniform_int(fbo_shader, "position_map", (GL_TEXTURE0 + TU_SHADOWMAP1) - GL_TEXTURE0);
texture_bind(def_position_tex); texture_bind(def_position_tex);
geom_render(quad_geo);
texture_unbind(def_position_tex);
glViewport(0, 0, width / 2, height / 2); shader_set_uniform_int(fbo_shader, "normal_map", (GL_TEXTURE0 + TU_SHADOWMAP2) - GL_TEXTURE0);
texture_bind(def_normal_tex); texture_bind(def_normal_tex);
geom_render(quad_geo);
texture_unbind(def_normal_tex);
glViewport(width / 2, 0, width / 2, height / 2); shader_set_uniform_int(fbo_shader, "uv_map", (GL_TEXTURE0 + TU_SHADOWMAP3) - GL_TEXTURE0);
texture_bind(def_depth_tex); texture_bind(def_uv_tex);
geom_render(quad_geo); geom_render(quad_geo);
texture_unbind(def_depth_tex);
//struct Camera* primary_camera = camera_get_primary();
//texture_bind(primary_camera->render_tex);
/* glViewport(0, height / 2, width / 2, height / 2); */
/* texture_bind(def_albedo_tex); */
/* geom_render(quad_geo); */
/* texture_unbind(def_albedo_tex); */
/* glViewport(width / 2, height / 2, width / 2, height / 2); */
/* texture_bind(def_position_tex); */
/* geom_render(quad_geo); */
/* texture_unbind(def_position_tex); */
/* glViewport(0, 0, width / 2, height / 2); */
/* texture_bind(def_normal_tex); */
/* geom_render(quad_geo); */
/* texture_unbind(def_normal_tex); */
/* glViewport(width / 2, 0, width / 2, height / 2); */
/* texture_bind(def_depth_tex); */
/* geom_render(quad_geo); */
/* texture_unbind(def_depth_tex); */
shader_unbind(); shader_unbind();
texture_unbind(def_albedo_tex);
texture_unbind(def_position_tex);
texture_unbind(def_normal_tex);
texture_unbind(def_uv_tex);
} }
void renderer_cleanup(void) void renderer_cleanup(void)

Loading…
Cancel
Save