[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49904] branches/ge_harmony: Adding a prepass to get some normal and fragment position data to the light shader .
Daniel Stokes
kupomail at gmail.com
Tue Aug 14 22:49:45 CEST 2012
Revision: 49904
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49904
Author: kupoman
Date: 2012-08-14 20:49:45 +0000 (Tue, 14 Aug 2012)
Log Message:
-----------
Adding a prepass to get some normal and fragment position data to the light shader. Starting to see shading in the light map now :)
Also fixing the shaders to work with the datatoc changes.
Modified Paths:
--------------
branches/ge_harmony/SConstruct
branches/ge_harmony/source/blender/gpu/CMakeLists.txt
branches/ge_harmony/source/blender/gpu/GPU_extensions.h
branches/ge_harmony/source/blender/gpu/SConscript
branches/ge_harmony/source/blender/gpu/intern/gpu_extensions.c
branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl
branches/ge_harmony/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
branches/ge_harmony/source/gameengine/Ketsji/KX_Light.cpp
branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h
branches/ge_harmony/source/gameengine/Rasterizer/RAS_LightObject.h
branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
Added Paths:
-----------
branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_prepass_frag.glsl
branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_prepass_vert.glsl
Removed Paths:
-------------
branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl.c
Modified: branches/ge_harmony/SConstruct
===================================================================
--- branches/ge_harmony/SConstruct 2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/SConstruct 2012-08-14 20:49:45 UTC (rev 49904)
@@ -502,6 +502,7 @@
data_to_c_simple("release/datafiles/preview.blend")
# --- glsl ---
+data_to_c_simple("source/blender/gpu/shaders/gpu_shader_light_frag.glsl")
data_to_c_simple("source/blender/gpu/shaders/gpu_shader_material.glsl")
data_to_c_simple("source/blender/gpu/shaders/gpu_shader_vertex.glsl")
data_to_c_simple("source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_frag.glsl")
Modified: branches/ge_harmony/source/blender/gpu/CMakeLists.txt
===================================================================
--- branches/ge_harmony/source/blender/gpu/CMakeLists.txt 2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/blender/gpu/CMakeLists.txt 2012-08-14 20:49:45 UTC (rev 49904)
@@ -50,7 +50,6 @@
intern/gpu_draw.c
intern/gpu_extensions.c
intern/gpu_material.c
- shaders/gpu_shader_light_frag.glsl.c
GPU_buffers.h
GPU_draw.h
@@ -59,7 +58,10 @@
intern/gpu_codegen.h
)
+data_to_c_simple(shaders/gpu_shader_light_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_material.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_prepass_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_prepass_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_vertex.glsl SRC)
data_to_c_simple(shaders/gpu_shader_sep_gaussian_blur_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_sep_gaussian_blur_vert.glsl SRC)
Modified: branches/ge_harmony/source/blender/gpu/GPU_extensions.h
===================================================================
--- branches/ge_harmony/source/blender/gpu/GPU_extensions.h 2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/blender/gpu/GPU_extensions.h 2012-08-14 20:49:45 UTC (rev 49904)
@@ -224,6 +224,7 @@
GPU_SHADER_VSM_STORE,
GPU_SHADER_SEP_GAUSSIAN_BLUR,
GPU_SHADER_LIGHT,
+ GPU_SHADER_PREPASS,
} GPUBuiltinShader;
GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader);
Modified: branches/ge_harmony/source/blender/gpu/SConscript
===================================================================
--- branches/ge_harmony/source/blender/gpu/SConscript 2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/blender/gpu/SConscript 2012-08-14 20:49:45 UTC (rev 49904)
@@ -23,6 +23,7 @@
# generated data files
import os
sources.extend((
+ os.path.join(env['DATA_SOURCES'], "gpu_shader_light_frag.glsl.c"),
os.path.join(env['DATA_SOURCES'], "gpu_shader_material.glsl.c"),
os.path.join(env['DATA_SOURCES'], "gpu_shader_vertex.glsl.c"),
os.path.join(env['DATA_SOURCES'], "gpu_shader_sep_gaussian_blur_frag.glsl.c"),
Modified: branches/ge_harmony/source/blender/gpu/intern/gpu_extensions.c
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_extensions.c 2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_extensions.c 2012-08-14 20:49:45 UTC (rev 49904)
@@ -74,11 +74,14 @@
extern char datatoc_gpu_shader_sep_gaussian_blur_vert_glsl[];
extern char datatoc_gpu_shader_sep_gaussian_blur_frag_glsl[];
extern char datatoc_gpu_shader_light_frag_glsl[];
+extern char datatoc_gpu_shader_prepass_frag_glsl[];
+extern char datatoc_gpu_shader_prepass_vert_glsl[];
typedef struct GPUShaders {
GPUShader *vsm_store;
GPUShader *sep_gaussian_blur;
GPUShader *light;
+ GPUShader *prepass;
} GPUShaders;
static struct GPUGlobal {
@@ -1378,6 +1381,11 @@
GG.shaders.light = GPU_shader_create(NULL, datatoc_gpu_shader_light_frag_glsl, NULL, NULL, 0, 0);
retval = GG.shaders.light;
break;
+ case GPU_SHADER_PREPASS:
+ if (!GG.shaders.prepass)
+ GG.shaders.prepass = GPU_shader_create(datatoc_gpu_shader_prepass_vert_glsl, datatoc_gpu_shader_prepass_frag_glsl, NULL, NULL, 0, 0);
+ retval = GG.shaders.prepass;
+ break;
}
if (retval == NULL)
Modified: branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl
===================================================================
--- branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl 2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl 2012-08-14 20:49:45 UTC (rev 49904)
@@ -1,13 +1,25 @@
struct Light {
- float energy;
- vec3 color;
- vec3 position;
+ float energy;
+ vec3 color;
+ vec3 position;
};
uniform Light light;
+uniform sampler2D prepass1;
+uniform sampler2D prepass2;
+
void main()
{
- gl_FragData[0] = vec4(light.color, light.energy);
+ vec3 N = texture2D(prepass1, gl_TexCoord[0].st).rgb;
+ vec3 V = texture2D(prepass2, gl_TexCoord[0].st).rgb;
+ vec3 L = light.position - V;
+ L = normalize(L);
+
+ float lambert = max(dot(N, L), 0.0);
+
+ vec3 diff = light.color * light.energy * lambert;
+
+ gl_FragData[0] = vec4(diff, 1);
}
Deleted: branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl.c
===================================================================
--- branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl.c 2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl.c 2012-08-14 20:49:45 UTC (rev 49904)
@@ -1,12 +0,0 @@
-/* DataToC output of file <gpu_shader_light_frag_glsl> */
-
-int datatoc_gpu_shader_light_frag_glsl_size = 178;
-char datatoc_gpu_shader_light_frag_glsl[] = {
-115,116,114,117, 99,116, 32, 76,105,103,104,116, 32,123, 13, 10, 32, 32,
- 32, 32,102,108,111, 97,116, 32,101,110,101,114,103,121, 59, 13, 10, 32, 32, 32, 32,118,101, 99, 51, 32, 99,111,108,111,114, 59,
- 13, 10, 32, 32, 32, 32,118,101, 99, 51, 32,112,111,115,105,116,105,111,110, 59, 13, 10,125, 59, 13, 10, 13, 10,117,110,105,102,
-111,114,109, 32, 76,105,103,104,116, 32,108,105,103,104,116, 59, 13, 10, 13, 10,118,111,105,100, 32,109, 97,105,110, 40, 41, 13,
- 10,123, 13, 10, 32, 32, 32, 32,103,108, 95, 70,114, 97,103, 68, 97,116, 97, 91, 48, 93, 32, 61, 32,118,101, 99, 52, 40,108,105,
-103,104,116, 46, 99,111,108,111,114, 44, 32,108,105,103,104,116, 46,101,110,101,114,103,121, 41, 59, 13, 10,125, 13, 10, 13, 10,
- 0};
-
Added: branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_prepass_frag.glsl
===================================================================
--- branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_prepass_frag.glsl (rev 0)
+++ branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_prepass_frag.glsl 2012-08-14 20:49:45 UTC (rev 49904)
@@ -0,0 +1,9 @@
+
+varying vec3 varnormal;
+varying vec3 varposition;
+
+void main()
+{
+ gl_FragData[0].rgb = varnormal;
+ gl_FragData[1].rgb = varposition;
+}
\ No newline at end of file
Added: branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_prepass_vert.glsl
===================================================================
--- branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_prepass_vert.glsl (rev 0)
+++ branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_prepass_vert.glsl 2012-08-14 20:49:45 UTC (rev 49904)
@@ -0,0 +1,13 @@
+
+varying vec3 varposition;
+varying vec3 varnormal;
+
+void main()
+{
+ vec4 co = gl_ModelViewMatrix * gl_Vertex;
+
+ varposition = co.xyz;
+ varnormal = normalize(gl_NormalMatrix * gl_Normal);
+ gl_Position = gl_ProjectionMatrix * co;
+}
+
Modified: branches/ge_harmony/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Ketsji/KX_KetsjiEngine.cpp 2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/gameengine/Ketsji/KX_KetsjiEngine.cpp 2012-08-14 20:49:45 UTC (rev 49904)
@@ -872,6 +872,14 @@
// this is now done incrementatlly in KX_Scene::CalculateVisibleMeshes
//scene->UpdateMeshTransformations();
+ // prepass
+ m_rasterizer->BeginPrePass();
+ RenderFrame(scene, cam);
+ m_rasterizer->EndPrePass();
+
+ // shadow buffers
+ RenderShadowBuffers(scene);
+
// light pass
m_rasterizer->BeginLightPass();
CListValue *lightlist = scene->GetLightList();
@@ -879,9 +887,6 @@
m_rasterizer->RenderLight(((KX_LightObject*)lightlist->GetValue(i))->GetLightData());
m_rasterizer->EndLightPass();
- // shadow buffers
- RenderShadowBuffers(scene);
-
// Avoid drawing the scene with the active camera twice when it's viewport is enabled
if (cam && !cam->GetViewport())
{
Modified: branches/ge_harmony/source/gameengine/Ketsji/KX_Light.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Ketsji/KX_Light.cpp 2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/gameengine/Ketsji/KX_Light.cpp 2012-08-14 20:49:45 UTC (rev 49904)
@@ -208,7 +208,7 @@
for (int j=0; j<4; j++, dobmat++)
obmat[i][j] = (float)*dobmat;
- memcpy(m_lightobj.m_position, &obmat[0][3], sizeof(float)*3);
+ memcpy(m_lightobj.m_position, &obmat[3], sizeof(float)*4);
GPU_lamp_update(lamp, m_lightobj.m_layer, 0, obmat);
GPU_lamp_update_colors(lamp, m_lightobj.m_red, m_lightobj.m_green,
Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h 2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h 2012-08-14 20:49:45 UTC (rev 49904)
@@ -77,7 +77,8 @@
KX_SOLID,
KX_SHADED,
KX_TEXTURED,
- KX_SHADOW
+ KX_SHADOW,
+ KX_OVERRIDE
};
/**
@@ -457,6 +458,9 @@
virtual void RenderLight(RAS_LightObject *light)=0;
virtual void EndLightPass()=0;
+ virtual void BeginPrePass()=0;
+ virtual void EndPrePass()=0;
+
#ifdef WITH_CXX_GUARDEDALLOC
MEM_CXX_CLASS_ALLOC_FUNCS("GE:RAS_IRasterizer")
#endif
Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_LightObject.h
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_LightObject.h 2012-08-14 20:12:53 UTC (rev 49903)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_LightObject.h 2012-08-14 20:49:45 UTC (rev 49904)
@@ -63,7 +63,7 @@
bool m_nodiffuse;
bool m_nospecular;
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list