Parcourir la source

Started restructuring materials, restored screen shaders in new renderer

Ivan Safrin il y a 10 ans
Parent
commit
e1bf75b509
36 fichiers modifiés avec 287 ajouts et 178 suppressions
  1. BIN
      assets/default/default.pak
  2. 19 0
      assets/default/default/BlurH.frag
  3. 20 0
      assets/default/default/BlurV.frag
  4. 24 0
      assets/default/default/default.mat
  5. BIN
      assets/default/hdr.pak
  6. 7 3
      assets/default/hdr/ExtractBloom.frag
  7. 11 11
      assets/default/hdr/HDRBloomH.frag
  8. 11 11
      assets/default/hdr/HDRBloomV.frag
  9. 2 1
      assets/default/hdr/HDRProcess.frag
  10. 3 2
      assets/default/hdr/HDRProcessBloom.frag
  11. 3 0
      assets/default/hdr/hdr.mat
  12. 8 4
      build/osx/TemplateApp/TemplateApp.xcodeproj/project.pbxproj
  13. 1 1
      build/osx/TemplateApp/TemplateApp/PolycodeTemplateApp.h
  14. 24 7
      build/osx/TemplateApp/TemplateApp/PolycodeTemplateApp.mm
  15. 3 18
      include/polycode/core/PolyCamera.h
  16. 1 0
      include/polycode/core/PolyMaterial.h
  17. 1 1
      include/polycode/core/PolyRenderer.h
  18. 3 2
      include/polycode/core/PolySceneRenderTexture.h
  19. 4 1
      include/polycode/core/PolyTexture.h
  20. 68 50
      src/core/PolyCamera.cpp
  21. 15 14
      src/core/PolyMaterial.cpp
  22. 2 10
      src/core/PolyMaterialManager.cpp
  23. 14 8
      src/core/PolyOpenGLGraphicsInterface.cpp
  24. 8 6
      src/core/PolyRenderer.cpp
  25. 0 1
      src/core/PolySceneEntityInstance.cpp
  26. 1 1
      src/core/PolySceneLight.cpp
  27. 1 0
      src/core/PolySceneManager.cpp
  28. 1 0
      src/core/PolySceneMesh.cpp
  29. 3 3
      src/core/PolySceneRenderTexture.cpp
  30. 1 0
      src/core/PolyShader.cpp
  31. 8 3
      src/core/PolyTexture.cpp
  32. 4 4
      src/ide/PolycodeEntityEditor.cpp
  33. 3 3
      src/ide/PolycodeIDEApp.cpp
  34. 3 3
      src/ide/PolycodeMaterialEditor.cpp
  35. 1 1
      src/ide/PolycodeMeshEditor.cpp
  36. 9 9
      src/ide/PolycodeProps.cpp

BIN
assets/default/default.pak


+ 19 - 0
assets/default/default/BlurH.frag

@@ -0,0 +1,19 @@
+uniform sampler2D screenTexture;
+uniform float blurSize;
+varying vec2 texCoordVar;
+
+void main(void)
+{
+   vec4 sum = vec4(0.0);
+   sum += texture2D(screenTexture, vec2(texCoordVar.x - 4.0*blurSize, texCoordVar.y)) * 0.05;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x - 3.0*blurSize, texCoordVar.y)) * 0.09;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x - 2.0*blurSize, texCoordVar.y)) * 0.12;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x - blurSize, texCoordVar.y)) * 0.15;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y)) * 0.16;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x + blurSize, texCoordVar.y)) * 0.15;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x + 2.0*blurSize, texCoordVar.y)) * 0.12;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x + 3.0*blurSize, texCoordVar.y)) * 0.09;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x + 4.0*blurSize, texCoordVar.y)) * 0.05;
+   
+   gl_FragColor = sum;
+}

+ 20 - 0
assets/default/default/BlurV.frag

@@ -0,0 +1,20 @@
+uniform sampler2D screenTexture;
+uniform float blurSize;
+varying vec2 texCoordVar;
+
+void main(void)
+{
+   vec4 sum = vec4(0.0);
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y - 4.0*blurSize)) * 0.05;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y - 3.0*blurSize)) * 0.09;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y - 2.0*blurSize)) * 0.12;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y - blurSize)) * 0.15;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y)) * 0.16;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y + blurSize)) * 0.15;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y + 2.0*blurSize)) * 0.12;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y + 3.0*blurSize)) * 0.09;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y + 4.0*blurSize)) * 0.05;
+   
+   gl_FragColor = sum;
+
+}

+ 24 - 0
assets/default/default/default.mat

@@ -36,9 +36,33 @@
 		<shader type="glsl" name="InvertShader" screen="true">		
 		<shader type="glsl" name="InvertShader" screen="true">		
 			<vp source="default/ScreenShader.vert"/>
 			<vp source="default/ScreenShader.vert"/>
 			<fp source="default/Invert.frag"/>
 			<fp source="default/Invert.frag"/>
+		</shader>	
+		<shader type="glsl" name="BlurHShader" screen="true">		
+			<vp source="default/ScreenShader.vert"/>
+			<fp source="default/BlurH.frag"/>
+		</shader>
+		<shader type="glsl" name="BlurVShader" screen="true">		
+			<vp source="default/ScreenShader.vert"/>
+			<fp source="default/BlurV.frag"/>
 		</shader>		
 		</shader>		
 	</shaders>	
 	</shaders>	
 	<materials>
 	<materials>
+		<material name="Blur">
+			<rendertargets type="rgba">
+				<rendertarget id="blurtarget" sizeMode="pixels" width="512" height="512"/>
+			</rendertargets>		
+			<shader name="BlurHShader">
+				<targettextures>
+					<targettexture mode="color" name="screenTexture"/>
+					<targettexture mode="out" id="blurtarget"/>					
+				</targettextures>				
+			</shader>
+			<shader name="BlurVShader">
+				<targettextures>
+					<targettexture mode="in" name="screenTexture" id="blurtarget"/>
+				</targettextures>				
+			</shader>			
+		</material>	
 		<material name="Invert">
 		<material name="Invert">
 			<shader name="InvertShader">
 			<shader name="InvertShader">
 				<targettextures>			
 				<targettextures>			

BIN
assets/default/hdr.pak


+ 7 - 3
assets/default/hdr/ExtractBloom.frag

@@ -1,12 +1,16 @@
 uniform sampler2D screenColorBuffer;
 uniform sampler2D screenColorBuffer;
 uniform float brightThreshold;
 uniform float brightThreshold;
- 
+varying vec2 texCoordVar;
+
 void main(void)
 void main(void)
 {	
 {	
-	vec4 color =  texture2D(screenColorBuffer,gl_TexCoord[0].st);
+	vec4 color =  texture2D(screenColorBuffer, texCoordVar);
 	float lum = dot(vec4(0.30, 0.59, 0.11, 0.0), color);
 	float lum = dot(vec4(0.30, 0.59, 0.11, 0.0), color);
+
     if (lum > brightThreshold)
     if (lum > brightThreshold)
         gl_FragColor = color;
         gl_FragColor = color;
     else
     else
-        gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);		
+        gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);		
+
+
 }
 }

+ 11 - 11
assets/default/hdr/HDRBloomH.frag

@@ -1,19 +1,19 @@
 uniform sampler2D screenTexture;
 uniform sampler2D screenTexture;
 uniform float blurSize;
 uniform float blurSize;
- 
+varying vec2 texCoordVar;
+
 void main(void)
 void main(void)
 {
 {
-   vec2 vTexCoord = gl_TexCoord[0].st;
    vec4 sum = vec4(0.0);
    vec4 sum = vec4(0.0);
-   sum += texture2D(screenTexture, vec2(vTexCoord.x - 4.0*blurSize, vTexCoord.y)) * 0.05;
-   sum += texture2D(screenTexture, vec2(vTexCoord.x - 3.0*blurSize, vTexCoord.y)) * 0.09;
-   sum += texture2D(screenTexture, vec2(vTexCoord.x - 2.0*blurSize, vTexCoord.y)) * 0.12;
-   sum += texture2D(screenTexture, vec2(vTexCoord.x - blurSize, vTexCoord.y)) * 0.15;
-   sum += texture2D(screenTexture, vec2(vTexCoord.x, vTexCoord.y)) * 0.16;
-   sum += texture2D(screenTexture, vec2(vTexCoord.x + blurSize, vTexCoord.y)) * 0.15;
-   sum += texture2D(screenTexture, vec2(vTexCoord.x + 2.0*blurSize, vTexCoord.y)) * 0.12;
-   sum += texture2D(screenTexture, vec2(vTexCoord.x + 3.0*blurSize, vTexCoord.y)) * 0.09;
-   sum += texture2D(screenTexture, vec2(vTexCoord.x + 4.0*blurSize, vTexCoord.y)) * 0.05;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x - 4.0*blurSize, texCoordVar.y)) * 0.05;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x - 3.0*blurSize, texCoordVar.y)) * 0.09;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x - 2.0*blurSize, texCoordVar.y)) * 0.12;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x - blurSize, texCoordVar.y)) * 0.15;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y)) * 0.16;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x + blurSize, texCoordVar.y)) * 0.15;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x + 2.0*blurSize, texCoordVar.y)) * 0.12;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x + 3.0*blurSize, texCoordVar.y)) * 0.09;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x + 4.0*blurSize, texCoordVar.y)) * 0.05;
    
    
    gl_FragColor = sum;
    gl_FragColor = sum;
 }
 }

+ 11 - 11
assets/default/hdr/HDRBloomV.frag

@@ -1,19 +1,19 @@
 uniform sampler2D screenTexture;
 uniform sampler2D screenTexture;
 uniform float blurSize;
 uniform float blurSize;
- 
+varying vec2 texCoordVar;
+
 void main(void)
 void main(void)
 {
 {
-   vec2 vTexCoord = gl_TexCoord[0].st;
    vec4 sum = vec4(0.0);
    vec4 sum = vec4(0.0);
-   sum += texture2D(screenTexture, vec2(vTexCoord.x, vTexCoord.y - 4.0*blurSize)) * 0.05;
-   sum += texture2D(screenTexture, vec2(vTexCoord.x, vTexCoord.y - 3.0*blurSize)) * 0.09;
-   sum += texture2D(screenTexture, vec2(vTexCoord.x, vTexCoord.y - 2.0*blurSize)) * 0.12;
-   sum += texture2D(screenTexture, vec2(vTexCoord.x, vTexCoord.y - blurSize)) * 0.15;
-   sum += texture2D(screenTexture, vec2(vTexCoord.x, vTexCoord.y)) * 0.16;
-   sum += texture2D(screenTexture, vec2(vTexCoord.x, vTexCoord.y + blurSize)) * 0.15;
-   sum += texture2D(screenTexture, vec2(vTexCoord.x, vTexCoord.y + 2.0*blurSize)) * 0.12;
-   sum += texture2D(screenTexture, vec2(vTexCoord.x, vTexCoord.y + 3.0*blurSize)) * 0.09;
-   sum += texture2D(screenTexture, vec2(vTexCoord.x, vTexCoord.y + 4.0*blurSize)) * 0.05;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y - 4.0*blurSize)) * 0.05;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y - 3.0*blurSize)) * 0.09;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y - 2.0*blurSize)) * 0.12;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y - blurSize)) * 0.15;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y)) * 0.16;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y + blurSize)) * 0.15;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y + 2.0*blurSize)) * 0.12;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y + 3.0*blurSize)) * 0.09;
+   sum += texture2D(screenTexture, vec2(texCoordVar.x, texCoordVar.y + 4.0*blurSize)) * 0.05;
    
    
    gl_FragColor = sum;
    gl_FragColor = sum;
 }
 }

+ 2 - 1
assets/default/hdr/HDRProcess.frag

@@ -1,10 +1,11 @@
 uniform sampler2D screenColorBuffer;
 uniform sampler2D screenColorBuffer;
 uniform float exposure;
 uniform float exposure;
+varying vec2 texCoordVar;
 
 
 void main(void)
 void main(void)
 {
 {
 	float brightMax = 1.0;
 	float brightMax = 1.0;
 	float YD = exposure * (exposure/brightMax + 1.0) / (exposure + 1.0);
 	float YD = exposure * (exposure/brightMax + 1.0) / (exposure + 1.0);
-	gl_FragColor = texture2D(screenColorBuffer,gl_TexCoord[0].st) * YD;
+	gl_FragColor = texture2D(screenColorBuffer, texCoordVar) * YD;
 	gl_FragColor.a = 1.0;
 	gl_FragColor.a = 1.0;
 }
 }

+ 3 - 2
assets/default/hdr/HDRProcessBloom.frag

@@ -2,13 +2,14 @@ uniform sampler2D baseTexture;
 uniform sampler2D bloomTexture;
 uniform sampler2D bloomTexture;
 uniform float exposure;
 uniform float exposure;
 uniform float bloomFactor;
 uniform float bloomFactor;
+varying vec2 texCoordVar;
 
 
 void main(void)
 void main(void)
 {
 {
 	float brightMax = 1.0;
 	float brightMax = 1.0;
 	
 	
-	vec4 colorBloom = texture2D(bloomTexture, gl_TexCoord[0].st);
-	vec4 color = texture2D(baseTexture,gl_TexCoord[0].st);
+	vec4 colorBloom = texture2D(bloomTexture, texCoordVar);
+	vec4 color = texture2D(baseTexture, texCoordVar);
 	
 	
 	color += colorBloom * bloomFactor;
 	color += colorBloom * bloomFactor;
 //	color = colorBloom * bloomFactor;
 //	color = colorBloom * bloomFactor;

+ 3 - 0
assets/default/hdr/hdr.mat

@@ -41,6 +41,9 @@
 		</material>									
 		</material>									
 		<material name="HDRProcess" screen="true">
 		<material name="HDRProcess" screen="true">
 			<shader name="HDRProcessShader">
 			<shader name="HDRProcessShader">
+				<targettextures>			
+					<targettexture mode="color" name="screenColorBuffer"/>
+				</targettextures>			
 			</shader>
 			</shader>
 		</material>	
 		</material>	
 		<material name="HDRProcessBloom" screen="true">
 		<material name="HDRProcessBloom" screen="true">

+ 8 - 4
build/osx/TemplateApp/TemplateApp.xcodeproj/project.pbxproj

@@ -8,6 +8,8 @@
 
 
 /* Begin PBXBuildFile section */
 /* Begin PBXBuildFile section */
 		6D6FD3E11BF122A2005AA8E9 /* PolycodeView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6D6FD3E01BF122A2005AA8E9 /* PolycodeView.mm */; };
 		6D6FD3E11BF122A2005AA8E9 /* PolycodeView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6D6FD3E01BF122A2005AA8E9 /* PolycodeView.mm */; };
+		6DCDD7231C71B150007E90E1 /* hdr.pak in Resources */ = {isa = PBXBuildFile; fileRef = 6DCDD7221C71B150007E90E1 /* hdr.pak */; };
+		6DCDD7251C724726007E90E1 /* main_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 6DCDD7241C724726007E90E1 /* main_icon.png */; };
 		6DD2D0B61BEEDC150026D85C /* libportaudio.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6DD2D0B51BEEDC150026D85C /* libportaudio.a */; };
 		6DD2D0B61BEEDC150026D85C /* libportaudio.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6DD2D0B51BEEDC150026D85C /* libportaudio.a */; };
 		8A825F271B82A2680039E823 /* libportaudio.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A825F261B82A2680039E823 /* libportaudio.a */; };
 		8A825F271B82A2680039E823 /* libportaudio.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A825F261B82A2680039E823 /* libportaudio.a */; };
 		8A825F291B82A29B0039E823 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A825F281B82A29B0039E823 /* CoreAudio.framework */; };
 		8A825F291B82A29B0039E823 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A825F281B82A29B0039E823 /* CoreAudio.framework */; };
@@ -30,11 +32,12 @@
 		8A86536B1B729559009F94DD /* PolycodeTemplateApp.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8A86536A1B729559009F94DD /* PolycodeTemplateApp.mm */; };
 		8A86536B1B729559009F94DD /* PolycodeTemplateApp.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8A86536A1B729559009F94DD /* PolycodeTemplateApp.mm */; };
 		8A8653701B72C431009F94DD /* default.pak in Resources */ = {isa = PBXBuildFile; fileRef = 8A86536F1B72C431009F94DD /* default.pak */; };
 		8A8653701B72C431009F94DD /* default.pak in Resources */ = {isa = PBXBuildFile; fileRef = 8A86536F1B72C431009F94DD /* default.pak */; };
 		8A8653961B752DBE009F94DD /* main_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 8A8653951B752DBE009F94DD /* main_icon.png */; };
 		8A8653961B752DBE009F94DD /* main_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 8A8653951B752DBE009F94DD /* main_icon.png */; };
-		8A9D4BE31BF25DE0002FD7DD /* BUGSHUFFLE.ogg in Resources */ = {isa = PBXBuildFile; fileRef = 8A9D4BE21BF25DE0002FD7DD /* BUGSHUFFLE.ogg */; };
 /* End PBXBuildFile section */
 /* End PBXBuildFile section */
 
 
 /* Begin PBXFileReference section */
 /* Begin PBXFileReference section */
 		6D6FD3E01BF122A2005AA8E9 /* PolycodeView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = PolycodeView.mm; path = ../../../../src/view/osx/PolycodeView.mm; sourceTree = "<group>"; };
 		6D6FD3E01BF122A2005AA8E9 /* PolycodeView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = PolycodeView.mm; path = ../../../../src/view/osx/PolycodeView.mm; sourceTree = "<group>"; };
+		6DCDD7221C71B150007E90E1 /* hdr.pak */ = {isa = PBXFileReference; lastKnownFileType = file; name = hdr.pak; path = ../../../../assets/default/hdr.pak; sourceTree = "<group>"; };
+		6DCDD7241C724726007E90E1 /* main_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = main_icon.png; path = ../../../../assets/icons/main_icon.png; sourceTree = "<group>"; };
 		6DD2D0B51BEEDC150026D85C /* libportaudio.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libportaudio.a; path = ../../../../lib/osx/libportaudio.a; sourceTree = "<group>"; };
 		6DD2D0B51BEEDC150026D85C /* libportaudio.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libportaudio.a; path = ../../../../lib/osx/libportaudio.a; sourceTree = "<group>"; };
 		8A825F261B82A2680039E823 /* libportaudio.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libportaudio.a; path = ../../../../lib/osx/libportaudio.a; sourceTree = "<group>"; };
 		8A825F261B82A2680039E823 /* libportaudio.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libportaudio.a; path = ../../../../lib/osx/libportaudio.a; sourceTree = "<group>"; };
 		8A825F281B82A29B0039E823 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; };
 		8A825F281B82A29B0039E823 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; };
@@ -62,7 +65,6 @@
 		8A86536E1B72C301009F94DD /* PolycodeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PolycodeView.h; path = ../../../../include/polycode/view/osx/PolycodeView.h; sourceTree = "<group>"; };
 		8A86536E1B72C301009F94DD /* PolycodeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PolycodeView.h; path = ../../../../include/polycode/view/osx/PolycodeView.h; sourceTree = "<group>"; };
 		8A86536F1B72C431009F94DD /* default.pak */ = {isa = PBXFileReference; lastKnownFileType = file; name = default.pak; path = ../../../../assets/default/default.pak; sourceTree = "<group>"; };
 		8A86536F1B72C431009F94DD /* default.pak */ = {isa = PBXFileReference; lastKnownFileType = file; name = default.pak; path = ../../../../assets/default/default.pak; sourceTree = "<group>"; };
 		8A8653951B752DBE009F94DD /* main_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = main_icon.png; path = ../../../../assets/icons/main_icon.png; sourceTree = "<group>"; };
 		8A8653951B752DBE009F94DD /* main_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = main_icon.png; path = ../../../../assets/icons/main_icon.png; sourceTree = "<group>"; };
-		8A9D4BE21BF25DE0002FD7DD /* BUGSHUFFLE.ogg */ = {isa = PBXFileReference; lastKnownFileType = file; name = BUGSHUFFLE.ogg; path = ../../../../../Hellmouth/Resources/Sounds/music/BUGSHUFFLE.ogg; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 /* End PBXFileReference section */
 
 
 /* Begin PBXFrameworksBuildPhase section */
 /* Begin PBXFrameworksBuildPhase section */
@@ -116,11 +118,12 @@
 			children = (
 			children = (
 				8A8653691B729559009F94DD /* PolycodeTemplateApp.h */,
 				8A8653691B729559009F94DD /* PolycodeTemplateApp.h */,
 				8A86536A1B729559009F94DD /* PolycodeTemplateApp.mm */,
 				8A86536A1B729559009F94DD /* PolycodeTemplateApp.mm */,
+				6DCDD7241C724726007E90E1 /* main_icon.png */,
 				8A8653351B72931C009F94DD /* AppDelegate.h */,
 				8A8653351B72931C009F94DD /* AppDelegate.h */,
 				8A8653361B72931C009F94DD /* AppDelegate.m */,
 				8A8653361B72931C009F94DD /* AppDelegate.m */,
 				6D6FD3E01BF122A2005AA8E9 /* PolycodeView.mm */,
 				6D6FD3E01BF122A2005AA8E9 /* PolycodeView.mm */,
-				8A9D4BE21BF25DE0002FD7DD /* BUGSHUFFLE.ogg */,
 				8A86536E1B72C301009F94DD /* PolycodeView.h */,
 				8A86536E1B72C301009F94DD /* PolycodeView.h */,
+				6DCDD7221C71B150007E90E1 /* hdr.pak */,
 				8A86536F1B72C431009F94DD /* default.pak */,
 				8A86536F1B72C431009F94DD /* default.pak */,
 				8A86533A1B72931C009F94DD /* Images.xcassets */,
 				8A86533A1B72931C009F94DD /* Images.xcassets */,
 				8A8653951B752DBE009F94DD /* main_icon.png */,
 				8A8653951B752DBE009F94DD /* main_icon.png */,
@@ -210,7 +213,8 @@
 				8A86533B1B72931C009F94DD /* Images.xcassets in Resources */,
 				8A86533B1B72931C009F94DD /* Images.xcassets in Resources */,
 				8A8653961B752DBE009F94DD /* main_icon.png in Resources */,
 				8A8653961B752DBE009F94DD /* main_icon.png in Resources */,
 				8A86533E1B72931C009F94DD /* MainMenu.xib in Resources */,
 				8A86533E1B72931C009F94DD /* MainMenu.xib in Resources */,
-				8A9D4BE31BF25DE0002FD7DD /* BUGSHUFFLE.ogg in Resources */,
+				6DCDD7251C724726007E90E1 /* main_icon.png in Resources */,
+				6DCDD7231C71B150007E90E1 /* hdr.pak in Resources */,
 				8A8653701B72C431009F94DD /* default.pak in Resources */,
 				8A8653701B72C431009F94DD /* default.pak in Resources */,
 			);
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			runOnlyForDeploymentPostprocessing = 0;

+ 1 - 1
build/osx/TemplateApp/TemplateApp/PolycodeTemplateApp.h

@@ -17,6 +17,6 @@ public:
     bool Update();
     bool Update();
     
     
 private:
 private:
-
+    ScenePrimitive *test ;
     Core *core;
     Core *core;
 };
 };

+ 24 - 7
build/osx/TemplateApp/TemplateApp/PolycodeTemplateApp.mm

@@ -11,20 +11,33 @@ PolycodeTemplateApp::PolycodeTemplateApp(PolycodeView *view) {
     core->addFileSource("archive", "default.pak");
     core->addFileSource("archive", "default.pak");
     ResourcePool *globalPool = Services()->getResourceManager()->getGlobalPool();
     ResourcePool *globalPool = Services()->getResourceManager()->getGlobalPool();
     globalPool->loadResourcesFromFolder("default", true);
     globalPool->loadResourcesFromFolder("default", true);
+
+    core->addFileSource("archive", "hdr.pak");
+    globalPool->loadResourcesFromFolder("hdr", true);
+    
     
     
 	// Write your code here!
 	// Write your code here!
     
     
     Scene *scene = new Scene(Scene::SCENE_2D);
     Scene *scene = new Scene(Scene::SCENE_2D);
     scene->useClearColor = true;
     scene->useClearColor = true;
-    
-    ScenePrimitive *test = new ScenePrimitive(ScenePrimitive::TYPE_VPLANE, 10.0, 10.0);
-    test->setMaterialByName("UnlitUntextured");
-    test->color = Color(1.0, 0.0, 0.0, 1.0);
-    test->enableScissor = true;
-    test->scissorBox.setRect(100, 50, 100, 30);
+    scene->clearColor.setColor(0.0, 0.0, 0.0, 1.0);
+    test = new ScenePrimitive(ScenePrimitive::TYPE_VPLANE, 0.5, 0.5);
+    test->setMaterialByName("Unlit");
+    test->getShaderPass(0).shaderBinding->loadTextureForParam("diffuse", "main_icon.png");
+//    test->color = Color(2.0, 2.0, 2.0, 1.0);
     scene->addChild(test);
     scene->addChild(test);
+
+
+    scene->getDefaultCamera()->setPostFilterByName("HDRProcessBloom");
+    Camera *camera = scene->getDefaultCamera();
+
+    camera->getShaderPass(0).shaderBinding->addParam(ProgramParam::PARAM_NUMBER, "brightThreshold")->setNumber(0.1);
+    camera->getShaderPass(1).shaderBinding->addParam(ProgramParam::PARAM_NUMBER, "blurSize")->setNumber(0.01);
+    camera->getShaderPass(2).shaderBinding->addParam(ProgramParam::PARAM_NUMBER, "blurSize")->setNumber(0.01);
+    camera->getShaderPass(3).shaderBinding->addParam(ProgramParam::PARAM_NUMBER, "bloomFactor")->setNumber(2.0);
+    camera->getShaderPass(3).shaderBinding->addParam(ProgramParam::PARAM_NUMBER, "exposure")->setNumber(0.7);
+    
     
     
-    scene->getDefaultCamera()->setPostFilterByName("Invert");
 //    Sound *music = new Sound("BUGSHUFFLE.ogg");
 //    Sound *music = new Sound("BUGSHUFFLE.ogg");
   //  music->Play();
   //  music->Play();
     
     
@@ -40,5 +53,9 @@ PolycodeTemplateApp::~PolycodeTemplateApp() {
 }
 }
 
 
 bool PolycodeTemplateApp::Update() {
 bool PolycodeTemplateApp::Update() {
+    Number elapsed = core->getElapsed();
+    
+    test->Roll(elapsed * 45.0);
+    
     return core->updateAndRender();
     return core->updateAndRender();
 }
 }

+ 3 - 18
include/polycode/core/PolyCamera.h

@@ -190,22 +190,6 @@ namespace Polycode {
              * Binds target buffers and renders the scene in multiple passes based on the post filter material.
              * Binds target buffers and renders the scene in multiple passes based on the post filter material.
              */
              */
 			void drawFilter(RenderBuffer *targetBuffer);
 			void drawFilter(RenderBuffer *targetBuffer);
-			
-			/**
-			* Sets the exposure for the camera. The exposure value is passed automatically to  post material shaders using an "exposure" uniform.
-			* @param level The new exposure value.
-			*/						
-			void setExposureLevel(Number level) {
-				exposureLevel = level;
-			}
-			
-			/**
-			* Returns the camera's exposure value.
-			* @return Current exposure value.
-			*/									
-			Number getExposureLevel() {
-				return exposureLevel;
-			}
 
 
 			/**
 			/**
 			* Sets the post-processing shader for the camera.
 			* Sets the post-processing shader for the camera.
@@ -296,6 +280,9 @@ namespace Polycode {
 
 
             void renderFullScreenQuad(GPUDrawBuffer *drawBuffer, int shaderPass);
             void renderFullScreenQuad(GPUDrawBuffer *drawBuffer, int shaderPass);
         
         
+            ShaderPass getShaderPass(unsigned int index);
+            unsigned int getNumShaderPasses();        
+        
 		protected:
 		protected:
         
         
             Mesh *screenQuadMesh;
             Mesh *screenQuadMesh;
@@ -313,8 +300,6 @@ namespace Polycode {
 
 
 			Number nearClipPlane;
 			Number nearClipPlane;
 			Number farClipPlane;
 			Number farClipPlane;
-								
-			Number exposureLevel;
 			Number fov;
 			Number fov;
 
 
 			Number leftFrustum,rightFrustum,topFrustum,bottomFrustum;
 			Number leftFrustum,rightFrustum,topFrustum,bottomFrustum;

+ 1 - 0
include/polycode/core/PolyMaterial.h

@@ -48,6 +48,7 @@ namespace Polycode {
             bool wireframe;
             bool wireframe;
             unsigned short blendingMode;
             unsigned short blendingMode;
             ShaderBinding* shaderBinding;
             ShaderBinding* shaderBinding;
+            ShaderBinding* materialShaderBinding;
         
         
             std::vector<VertexDataArray*> attributeArrays;
             std::vector<VertexDataArray*> attributeArrays;
     };
     };

+ 1 - 1
include/polycode/core/PolyRenderer.h

@@ -181,7 +181,7 @@ namespace Polycode {
         Cubemap *createCubemap(Texture *t0, Texture *t1, Texture *t2, Texture *t3, Texture *t4, Texture *t5);
         Cubemap *createCubemap(Texture *t0, Texture *t1, Texture *t2, Texture *t3, Texture *t4, Texture *t5);
         Texture *createTexture(unsigned int width, unsigned int height, char *textureData, bool clamp, bool createMipmaps, int type, unsigned int filteringMode, unsigned int anisotropy, bool framebufferTexture);
         Texture *createTexture(unsigned int width, unsigned int height, char *textureData, bool clamp, bool createMipmaps, int type, unsigned int filteringMode, unsigned int anisotropy, bool framebufferTexture);
         
         
-        RenderBuffer *createRenderBuffer(unsigned int width, unsigned int height, bool attachDepthBuffer);
+        RenderBuffer *createRenderBuffer(unsigned int width, unsigned int height, bool attachDepthBuffer, bool floatingPoint);
         void destroyRenderBuffer(RenderBuffer *buffer);
         void destroyRenderBuffer(RenderBuffer *buffer);
         
         
         void destroyTexture(Texture *texture);
         void destroyTexture(Texture *texture);

+ 3 - 2
include/polycode/core/PolySceneRenderTexture.h

@@ -46,7 +46,7 @@ namespace Polycode {
 			* @param renderHeight Vertical size of the render texture.
 			* @param renderHeight Vertical size of the render texture.
 			* @param floatingPoint Pass true if you want fp16 target renders			
 			* @param floatingPoint Pass true if you want fp16 target renders			
 			*/
 			*/
-            SceneRenderTexture(Scene *targetScene, Camera *targetCamera, int renderWidth,int renderHeight, unsigned int textureFormat = Image::IMAGE_RGBA);
+            SceneRenderTexture(Scene *targetScene, Camera *targetCamera, int renderWidth,int renderHeight, bool floatingPoint);
 			virtual ~SceneRenderTexture();
 			virtual ~SceneRenderTexture();
 						
 						
 			/**
 			/**
@@ -76,8 +76,9 @@ namespace Polycode {
 			
 			
 		protected:
 		protected:
         
         
+            bool floatingPoint;
+        
             Renderer *renderer;
             Renderer *renderer;
-            unsigned int textureFormat;
             RenderBuffer *targetFramebuffer;
             RenderBuffer *targetFramebuffer;
         
         
 			Scene *targetScene;
 			Scene *targetScene;

+ 4 - 1
include/polycode/core/PolyTexture.h

@@ -66,7 +66,7 @@ namespace Polycode {
     
     
     class _PolyExport RenderBuffer {
     class _PolyExport RenderBuffer {
         public:
         public:
-            RenderBuffer(unsigned int width, unsigned int height, bool attachDepthBuffer);
+            RenderBuffer(unsigned int width, unsigned int height, bool attachDepthBuffer, bool floatingPoint);
 
 
             unsigned int getWidth();
             unsigned int getWidth();
             unsigned int getHeight();
             unsigned int getHeight();
@@ -76,8 +76,11 @@ namespace Polycode {
 
 
             void *platformData;
             void *platformData;
             void *depthBufferPlatformData;
             void *depthBufferPlatformData;
+    
         private:
         private:
         
         
+            bool floatingPoint;
+        
             unsigned int width;
             unsigned int width;
             unsigned int height;
             unsigned int height;
     };
     };

+ 68 - 50
src/core/PolyCamera.cpp

@@ -30,6 +30,7 @@
 #include "polycode/core/PolyScene.h"
 #include "polycode/core/PolyScene.h"
 #include "polycode/core/PolyShader.h"
 #include "polycode/core/PolyShader.h"
 #include "polycode/core/PolyTexture.h"
 #include "polycode/core/PolyTexture.h"
+#include "polycode/core/PolyLogger.h"
 #include "polycode/core/PolyGPUDrawBuffer.h"
 #include "polycode/core/PolyGPUDrawBuffer.h"
 
 
 using namespace Polycode;
 using namespace Polycode;
@@ -41,7 +42,6 @@ Camera::Camera(Scene *parentScene) : Entity() {
 	setFOV(45.0f);
 	setFOV(45.0f);
 	filterShaderMaterial = NULL;
 	filterShaderMaterial = NULL;
 	originalFramebuffer = NULL;
 	originalFramebuffer = NULL;
-	exposureLevel = 1.0f;
 	_hasFilterShader = false;
 	_hasFilterShader = false;
 	frustumCulling = true;
 	frustumCulling = true;
 	nearClipPlane = 1.0;
 	nearClipPlane = 1.0;
@@ -298,7 +298,6 @@ void Camera::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) co
 	cloneCamera->setOrthoSize(orthoSizeX, orthoSizeY);
 	cloneCamera->setOrthoSize(orthoSizeX, orthoSizeY);
 	cloneCamera->projectionMode = projectionMode;
 	cloneCamera->projectionMode = projectionMode;
 	cloneCamera->setClippingPlanes(nearClipPlane, farClipPlane);
 	cloneCamera->setClippingPlanes(nearClipPlane, farClipPlane);
-    cloneCamera->setExposureLevel(exposureLevel);
 }
 }
 
 
 Scene *Camera::getParentScene() const {
 Scene *Camera::getParentScene() const {
@@ -334,14 +333,57 @@ void Camera::setPostFilter(Material *material) {
     this->filterShaderMaterial = material;
     this->filterShaderMaterial = material;
 
 
     if(!originalFramebuffer) {
     if(!originalFramebuffer) {
-        originalFramebuffer = Services()->getRenderer()->createRenderBuffer(CoreServices::getInstance()->getCore()->getXRes(), CoreServices::getInstance()->getCore()->getYRes(), true);
+        originalFramebuffer = Services()->getRenderer()->createRenderBuffer(CoreServices::getInstance()->getCore()->getXRes() * renderer->getBackingResolutionScaleX(), CoreServices::getInstance()->getCore()->getYRes() * renderer->getBackingResolutionScaleY(), true, material->fp16RenderTargets);
     }
     }
     
     
+    if(!screenQuadMesh) {
+        screenQuadMesh = new Mesh(Mesh::TRI_MESH);
+        
+        screenQuadMesh->addVertexWithUV(1.0, 1.0, 0.0, 1.0, 1.0);
+        screenQuadMesh->addVertexWithUV(1.0, -1.0, 0.0, 1.0, 0.0);
+        screenQuadMesh->addVertexWithUV(-1.0, -1.0, 0.0, 0.0, 0.0);
+        
+        screenQuadMesh->addVertexWithUV(-1.0, -1.0, 0.0, 0.0, 0.0);
+        screenQuadMesh->addVertexWithUV(-1.0, 1.0, 0.0, 0.0, 1.0);
+        screenQuadMesh->addVertexWithUV(1.0, 1.0, 0.0, 1.0, 1.0);
+        
+    }
+    
+    for(int i=0; i < shaderPasses.size(); i++)  {
+        delete shaderPasses[i].shaderBinding;
+    }
+    shaderPasses.clear();
+    
     for(int i=0; i < material->getNumShaderPasses(); i++)  {
     for(int i=0; i < material->getNumShaderPasses(); i++)  {
+        
+        ShaderBinding* materialBinding = material->getShaderBinding(i);
+        
         ShaderPass shaderPass = material->getShaderPass(i);
         ShaderPass shaderPass = material->getShaderPass(i);
+        shaderPass.materialShaderBinding = shaderPass.shaderBinding;
         shaderPass.shaderBinding = new ShaderBinding();
         shaderPass.shaderBinding = new ShaderBinding();
         shaderPass.shaderBinding->targetShader = shaderPass.shader;
         shaderPass.shaderBinding->targetShader = shaderPass.shader;
+        shaderPass.setAttributeArraysFromMesh(screenQuadMesh);
         shaderPass.shaderBinding->resetAttributes = true;
         shaderPass.shaderBinding->resetAttributes = true;
+        
+        for(int j=0; j < materialBinding->getNumColorTargetBindings(); j++) {
+            RenderTargetBinding *colorBinding = materialBinding->getColorTargetBinding(j);
+            shaderPass.shaderBinding->setTextureForParam(colorBinding->name, originalFramebuffer->colorTexture);
+        }
+        
+        for(int j=0; j < materialBinding->getNumDepthTargetBindings(); j++) {
+            RenderTargetBinding *depthBinding = materialBinding->getDepthTargetBinding(j);
+            shaderPass.shaderBinding->setTextureForParam(depthBinding->name, originalFramebuffer->depthTexture);
+        }
+        
+        for(int j=0; j < materialBinding->getNumInTargetBindings(); j++) {
+            RenderTargetBinding *inBinding = materialBinding->getInTargetBinding(j);
+            if(inBinding->buffer) {
+                shaderPass.shaderBinding->setTextureForParam(inBinding->name, inBinding->buffer->colorTexture);
+            } else {
+                Logger::log("WARNING: Post filter IN target ["+ inBinding->name + "] does not exist!\n");
+            }
+        }
+        
         shaderPasses.push_back(shaderPass);
         shaderPasses.push_back(shaderPass);
     }
     }
     
     
@@ -352,67 +394,44 @@ bool Camera::hasFilterShader() {
 	return _hasFilterShader;
 	return _hasFilterShader;
 }
 }
 
 
+ShaderPass Camera::getShaderPass(unsigned int index) {
+    if(index >= shaderPasses.size()) {
+        printf("WARNING: ACCESSING NON EXISTING SHADER PASS!\n");
+        return ShaderPass();
+    }
+    return shaderPasses[index];
+}
+
+unsigned int Camera::getNumShaderPasses() {
+    return shaderPasses.size();
+}
+
 void Camera::renderFullScreenQuad(GPUDrawBuffer *drawBuffer, int shaderPass) {
 void Camera::renderFullScreenQuad(GPUDrawBuffer *drawBuffer, int shaderPass) {
     GPUDrawCall drawCall;
     GPUDrawCall drawCall;
-    
-    if(!screenQuadMesh) {
-        screenQuadMesh = new Mesh(Mesh::TRI_MESH);
-        
-        screenQuadMesh->addVertexWithUV(1.0, 1.0, 0.0, 1.0, 1.0);
-        screenQuadMesh->addVertexWithUV(1.0, -1.0, 0.0, 1.0, 0.0);
-        screenQuadMesh->addVertexWithUV(-1.0, -1.0, 0.0, 0.0, 0.0);
-        
-        screenQuadMesh->addVertexWithUV(-1.0, -1.0, 0.0, 0.0, 0.0);
-        screenQuadMesh->addVertexWithUV(-1.0, 1.0, 0.0, 0.0, 1.0);
-        screenQuadMesh->addVertexWithUV(1.0, 1.0, 0.0, 1.0, 1.0);
-    }
-    
     drawCall.options.alphaTest = false;
     drawCall.options.alphaTest = false;
-    drawCall.options.backfaceCull = true;
+    drawCall.options.backfaceCull = false;
     drawCall.options.depthTest = false;
     drawCall.options.depthTest = false;
     drawCall.options.depthWrite = false;
     drawCall.options.depthWrite = false;
     drawCall.mesh = screenQuadMesh;
     drawCall.mesh = screenQuadMesh;
     drawCall.material = filterShaderMaterial;
     drawCall.material = filterShaderMaterial;
     drawCall.shaderPasses.push_back(shaderPasses[shaderPass]);
     drawCall.shaderPasses.push_back(shaderPasses[shaderPass]);
-    
     drawBuffer->drawCalls.push_back(drawCall);
     drawBuffer->drawCalls.push_back(drawCall);
 }
 }
 
 
 void Camera::drawFilter(RenderBuffer *targetBuffer) {
 void Camera::drawFilter(RenderBuffer *targetBuffer) {
 	if(!filterShaderMaterial)
 	if(!filterShaderMaterial)
 		return;
 		return;
-
-    RenderBuffer *finalTargetBuffer = NULL;
-		
-	if(targetBuffer) {
-        finalTargetBuffer = targetBuffer;
-        Polycode::Rectangle newVP(0.0, 0.0, targetBuffer->getWidth(), targetBuffer->getHeight());
-        setViewport(newVP);
-	} else {
-        finalTargetBuffer = originalFramebuffer;
-	}
-
-    parentScene->Render(this, finalTargetBuffer, NULL, true);
     
     
-	ShaderBinding* materialBinding;
-	for(int i=0; i < filterShaderMaterial->getNumShaderPasses(); i++) {
-        
-        materialBinding = filterShaderMaterial->getShaderPass(i).shaderBinding;
+    parentScene->Render(this, originalFramebuffer, NULL, true);
+    
+	for(int i=0; i < shaderPasses.size(); i++) {
         
         
-		for(int j=0; j < materialBinding->getNumColorTargetBindings(); j++) {
-			RenderTargetBinding *colorBinding = materialBinding->getColorTargetBinding(j);
-            materialBinding->setTextureForParam(colorBinding->name, finalTargetBuffer->colorTexture);
-		}
-
-		for(int j=0; j < materialBinding->getNumDepthTargetBindings(); j++) {
-			RenderTargetBinding *depthBinding = materialBinding->getDepthTargetBinding(j);
-            materialBinding->setTextureForParam(depthBinding->name, finalTargetBuffer->depthTexture);
-		}
+        ShaderBinding* materialBinding = filterShaderMaterial->getShaderPass(i).shaderBinding;
 
 
-		if(i == filterShaderMaterial->getNumShaderPasses()-1) {
+		if(i == shaderPasses.size()-1) {
             GPUDrawBuffer *drawBuffer = new GPUDrawBuffer();
             GPUDrawBuffer *drawBuffer = new GPUDrawBuffer();
-            drawBuffer->clearColorBuffer = true;
-            drawBuffer->clearDepthBuffer = true;
+            drawBuffer->clearColorBuffer = false;
+            drawBuffer->clearDepthBuffer = false;
             drawBuffer->globalMaterial = NULL;
             drawBuffer->globalMaterial = NULL;
             if(targetBuffer) {
             if(targetBuffer) {
                 drawBuffer->targetFramebuffer = targetBuffer;
                 drawBuffer->targetFramebuffer = targetBuffer;
@@ -423,14 +442,13 @@ void Camera::drawFilter(RenderBuffer *targetBuffer) {
             }
             }
             renderFullScreenQuad(drawBuffer, i);
             renderFullScreenQuad(drawBuffer, i);
             renderer->processDrawBuffer(drawBuffer);
             renderer->processDrawBuffer(drawBuffer);
-		} else {
-            
+		} else {            
 			for(int j=0; j < materialBinding->getNumOutTargetBindings(); j++) {
 			for(int j=0; j < materialBinding->getNumOutTargetBindings(); j++) {
 				RenderBuffer *bindingBuffer = materialBinding->getOutTargetBinding(j)->buffer;
 				RenderBuffer *bindingBuffer = materialBinding->getOutTargetBinding(j)->buffer;
 				if(bindingBuffer) {
 				if(bindingBuffer) {
                     GPUDrawBuffer *drawBuffer = new GPUDrawBuffer();
                     GPUDrawBuffer *drawBuffer = new GPUDrawBuffer();
-                    drawBuffer->clearColorBuffer = true;
-                    drawBuffer->clearDepthBuffer = true;
+                    drawBuffer->clearColorBuffer = false;
+                    drawBuffer->clearDepthBuffer = false;
                     drawBuffer->globalMaterial = NULL;
                     drawBuffer->globalMaterial = NULL;
 					drawBuffer->viewport.setRect(0.0, 0.0, bindingBuffer->getWidth(), bindingBuffer->getHeight());
 					drawBuffer->viewport.setRect(0.0, 0.0, bindingBuffer->getWidth(), bindingBuffer->getHeight());
                     drawBuffer->targetFramebuffer = bindingBuffer;
                     drawBuffer->targetFramebuffer = bindingBuffer;

+ 15 - 14
src/core/PolyMaterial.cpp

@@ -35,6 +35,7 @@ ShaderPass::ShaderPass() :
     shader(NULL),
     shader(NULL),
     wireframe(false),
     wireframe(false),
     shaderBinding(NULL),
     shaderBinding(NULL),
+    materialShaderBinding(NULL),
     blendingMode(Renderer::BLEND_MODE_NONE)
     blendingMode(Renderer::BLEND_MODE_NONE)
 {
 {
     
     
@@ -44,6 +45,7 @@ ShaderPass::ShaderPass(Shader *shader) :
     shader(shader),
     shader(shader),
     wireframe(false),
     wireframe(false),
     shaderBinding(NULL),
     shaderBinding(NULL),
+    materialShaderBinding(NULL),
     blendingMode(Renderer::BLEND_MODE_NONE)
     blendingMode(Renderer::BLEND_MODE_NONE)
 {
 {
     
     
@@ -170,11 +172,10 @@ void Material::recreateRenderTargets() {
 
 
 void Material::recreateRenderTarget(ShaderRenderTarget *renderTarget) {
 void Material::recreateRenderTarget(ShaderRenderTarget *renderTarget) {
     
     
-    // RENDERER_TODO
-    /*
+
 	int textureWidth;
 	int textureWidth;
 	int textureHeight;
 	int textureHeight;
-	Texture *newTexture;
+	RenderBuffer *newBuffer;
 	
 	
 	if(renderTarget->sizeMode == ShaderRenderTarget::SIZE_MODE_NORMALIZED) {
 	if(renderTarget->sizeMode == ShaderRenderTarget::SIZE_MODE_NORMALIZED) {
 		Number safeWidth = renderTarget->width;
 		Number safeWidth = renderTarget->width;
@@ -193,24 +194,23 @@ void Material::recreateRenderTarget(ShaderRenderTarget *renderTarget) {
 			textureWidth = (int) (renderTarget->normalizedWidth * safeWidth);
 			textureWidth = (int) (renderTarget->normalizedWidth * safeWidth);
 			textureHeight = (int) (renderTarget->normalizedHeight * safeHeight);		
 			textureHeight = (int) (renderTarget->normalizedHeight * safeHeight);		
 		} else {
 		} else {
-			textureWidth = (int) (CoreServices::getInstance()->getCore()->getXRes() * safeWidth);
-			textureHeight = (int) (CoreServices::getInstance()->getCore()->getYRes() * safeHeight);
+			textureWidth = (int) (CoreServices::getInstance()->getCore()->getXRes() * safeWidth * Services()->getRenderer()->getBackingResolutionScaleX());
+			textureHeight = (int) (CoreServices::getInstance()->getCore()->getYRes() * safeHeight * Services()->getRenderer()->getBackingResolutionScaleY());
 		}
 		}
 	} else {
 	} else {
 		textureWidth = (int)renderTarget->width;
 		textureWidth = (int)renderTarget->width;
 		textureHeight = (int)renderTarget->height;		
 		textureHeight = (int)renderTarget->height;		
 	}
 	}
-	
-	CoreServices::getInstance()->getRenderer()->createRenderTextures(&newTexture, NULL, textureWidth, textureHeight, fp16RenderTargets);
     
     
-	newTexture->setResourceName(renderTarget->id);
+    newBuffer = Services()->getRenderer()->createRenderBuffer(textureWidth, textureHeight, false, fp16RenderTargets);
+//	newBuffer->setResourceName(renderTarget->id);
 	
 	
-	Texture *oldTexture = renderTarget->texture;
-	renderTarget->texture = newTexture;
+	RenderBuffer *oldBuffer = renderTarget->buffer;
+	renderTarget->buffer = newBuffer;
 
 
-	if(oldTexture) {	
+    /*
+	if(oldBuffer) {
 		for(int i=0; i < shaderBindings.size(); i++) {
 		for(int i=0; i < shaderBindings.size(); i++) {
-				
 			for(int j=0; j < shaderBindings[i]->getNumRenderTargetBindings(); j++) {
 			for(int j=0; j < shaderBindings[i]->getNumRenderTargetBindings(); j++) {
 				if(shaderBindings[i]->getRenderTargetBinding(j)->texture == oldTexture) {
 				if(shaderBindings[i]->getRenderTargetBinding(j)->texture == oldTexture) {
 					shaderBindings[i]->getRenderTargetBinding(j)->texture = newTexture;
 					shaderBindings[i]->getRenderTargetBinding(j)->texture = newTexture;
@@ -222,14 +222,15 @@ void Material::recreateRenderTarget(ShaderRenderTarget *renderTarget) {
 		
 		
 		CoreServices::getInstance()->getRenderer()->destroyTexture(oldTexture);
 		CoreServices::getInstance()->getRenderer()->destroyTexture(oldTexture);
 	}
 	}
-    */
+*/
 }
 }
 
 
 void Material::handleEvent(Event *event) {
 void Material::handleEvent(Event *event) {
-    recreateExpectedShaderParams();
+//    recreateExpectedShaderParams();
 }
 }
 
 
 void Material::recreateExpectedShaderParams() {
 void Material::recreateExpectedShaderParams() {
+    return;
     for (int i = 0; i < shaderPasses.size(); i++) {
     for (int i = 0; i < shaderPasses.size(); i++) {
         
         
         Shader* shader = shaderPasses[i].shader;
         Shader* shader = shaderPasses[i].shader;

+ 2 - 10
src/core/PolyMaterialManager.cpp

@@ -473,11 +473,8 @@ Material *MaterialManager::materialFromXMLNode(ResourcePool *resourcePool, TiXml
 					ShaderRenderTarget *newTarget = new ShaderRenderTarget;
 					ShaderRenderTarget *newTarget = new ShaderRenderTarget;
 					newTarget->id = pChildElement->Attribute("id");
 					newTarget->id = pChildElement->Attribute("id");
                     
                     
-                    // RENDERER_TODO
-                    /*
-					newTarget->width = CoreServices::getInstance()->getRenderer()->getXRes();
-					newTarget->height = CoreServices::getInstance()->getRenderer()->getYRes();
-                    */
+                    newTarget->width = CoreServices::getInstance()->getCore()->getXRes();
+					newTarget->height = CoreServices::getInstance()->getCore()->getYRes();
                     
                     
 					newTarget->sizeMode = ShaderRenderTarget::SIZE_MODE_PIXELS;					
 					newTarget->sizeMode = ShaderRenderTarget::SIZE_MODE_PIXELS;					
 					if(pChildElement->Attribute("width") && pChildElement->Attribute("height")) {
 					if(pChildElement->Attribute("width") && pChildElement->Attribute("height")) {
@@ -578,11 +575,6 @@ Material *MaterialManager::materialFromXMLNode(ResourcePool *resourcePool, TiXml
 										newBinding->buffer = renderTargets[l]->buffer;
 										newBinding->buffer = renderTargets[l]->buffer;
 									}
 									}
 								}
 								}
-								
-								if(newBinding->mode == RenderTargetBinding::MODE_IN) {
-                                    // RENDERER_TODO
-									//newShaderBinding->addTexture(newBinding->name, newBinding->texture);
-								}
 							}						
 							}						
 						}
 						}
 					}					
 					}					

+ 14 - 8
src/core/PolyOpenGLGraphicsInterface.cpp

@@ -335,13 +335,10 @@ void OpenGLGraphicsInterface::createRenderBuffer(RenderBuffer *renderBuffer) {
         glGenFramebuffers(1, (GLuint*)renderBuffer->platformData);
         glGenFramebuffers(1, (GLuint*)renderBuffer->platformData);
         glBindFramebuffer(GL_FRAMEBUFFER, *((GLuint*)renderBuffer->platformData));
         glBindFramebuffer(GL_FRAMEBUFFER, *((GLuint*)renderBuffer->platformData));
     }
     }
-
     
     
     renderBuffer->colorTexture->framebufferTexture = true;
     renderBuffer->colorTexture->framebufferTexture = true;
-    renderBuffer->colorTexture->type = Image::IMAGE_RGBA;
     createTexture(renderBuffer->colorTexture);
     createTexture(renderBuffer->colorTexture);
     
     
-    
     if(renderBuffer->depthTexture) {
     if(renderBuffer->depthTexture) {
         renderBuffer->depthBufferPlatformData = (void*) new GLuint;
         renderBuffer->depthBufferPlatformData = (void*) new GLuint;
         glGenRenderbuffers(1, (GLuint*)renderBuffer->depthBufferPlatformData);
         glGenRenderbuffers(1, (GLuint*)renderBuffer->depthBufferPlatformData);
@@ -349,18 +346,24 @@ void OpenGLGraphicsInterface::createRenderBuffer(RenderBuffer *renderBuffer) {
         glRenderbufferStorage(GL_RENDERBUFFER, GL_COLOR_ATTACHMENT0, renderBuffer->getWidth(), renderBuffer->getHeight());
         glRenderbufferStorage(GL_RENDERBUFFER, GL_COLOR_ATTACHMENT0, renderBuffer->getWidth(), renderBuffer->getHeight());
     }
     }
     
     
-    
     glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, *((GLuint*)renderBuffer->colorTexture->platformData), 0);
     glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, *((GLuint*)renderBuffer->colorTexture->platformData), 0);
     
     
+    
     if(renderBuffer->depthTexture) {
     if(renderBuffer->depthTexture) {
         
         
         
         
         renderBuffer->depthTexture->framebufferTexture = true;
         renderBuffer->depthTexture->framebufferTexture = true;
         renderBuffer->depthTexture->depthTexture = true;
         renderBuffer->depthTexture->depthTexture = true;
+        renderBuffer->depthTexture->type = renderBuffer->colorTexture->type;
         renderBuffer->depthTexture->filteringMode = Texture::FILTERING_LINEAR;
         renderBuffer->depthTexture->filteringMode = Texture::FILTERING_LINEAR;
         createTexture(renderBuffer->depthTexture);
         createTexture(renderBuffer->depthTexture);
         
         
-        glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, renderBuffer->getWidth(), renderBuffer->getHeight());
+        if(renderBuffer->colorTexture->type == Image::IMAGE_FP16) {
+            glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, renderBuffer->getWidth(), renderBuffer->getHeight());
+            
+        } else {
+            glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, renderBuffer->getWidth(), renderBuffer->getHeight());
+        }
         glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, *((GLuint*)renderBuffer->depthTexture->platformData), 0);
         glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, *((GLuint*)renderBuffer->depthTexture->platformData), 0);
     }
     }
     
     
@@ -368,6 +371,9 @@ void OpenGLGraphicsInterface::createRenderBuffer(RenderBuffer *renderBuffer) {
 }
 }
 
 
 void OpenGLGraphicsInterface::destroyRenderBuffer(RenderBuffer *renderBuffer) {
 void OpenGLGraphicsInterface::destroyRenderBuffer(RenderBuffer *renderBuffer) {
+    if(!renderBuffer) {
+        return;
+    }
     glDeleteFramebuffers(1, (GLuint*)renderBuffer->platformData);
     glDeleteFramebuffers(1, (GLuint*)renderBuffer->platformData);
     if(renderBuffer->colorTexture) {
     if(renderBuffer->colorTexture) {
         destroyTexture(renderBuffer->colorTexture);
         destroyTexture(renderBuffer->colorTexture);
@@ -427,8 +433,8 @@ void OpenGLGraphicsInterface::createTexture(Texture *texture) {
             pixelType = GL_UNSIGNED_BYTE;
             pixelType = GL_UNSIGNED_BYTE;
             break;
             break;
         case Image::IMAGE_FP16:
         case Image::IMAGE_FP16:
-            glTextureType = GL_RGB;
-            glTextureFormat = GL_RGB;
+            glTextureType = GL_RGBA;
+            glTextureFormat = GL_RGBA16F_ARB;
             pixelType = GL_FLOAT;
             pixelType = GL_FLOAT;
             break;
             break;
         default:
         default:
@@ -455,7 +461,7 @@ void OpenGLGraphicsInterface::createTexture(Texture *texture) {
     switch(texture->filteringMode) {
     switch(texture->filteringMode) {
         case Texture::FILTERING_LINEAR:
         case Texture::FILTERING_LINEAR:
             
             
-            if(texture->anisotropy > 0) {
+            if(texture->anisotropy > 0 && !texture->framebufferTexture) {
 #ifndef STRICT_OPENGLES2
 #ifndef STRICT_OPENGLES2
                 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, texture->anisotropy);
                 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, texture->anisotropy);
 #endif
 #endif

+ 8 - 6
src/core/PolyRenderer.cpp

@@ -167,8 +167,6 @@ void RenderThread::processDrawBuffer(GPUDrawBuffer *buffer) {
         if(buffer->globalMaterial && !buffer->drawCalls[i].options.forceMaterial) {
         if(buffer->globalMaterial && !buffer->drawCalls[i].options.forceMaterial) {
             material = buffer->globalMaterial;
             material = buffer->globalMaterial;
         }
         }
-
-        
         
         
         if(material) {
         if(material) {
             
             
@@ -185,12 +183,17 @@ void RenderThread::processDrawBuffer(GPUDrawBuffer *buffer) {
                 graphicsInterface->beginDrawCall();
                 graphicsInterface->beginDrawCall();
                 
                 
                 ShaderPass shaderPass;
                 ShaderPass shaderPass;
+
                 if(s < material->getNumShaderPasses()) {
                 if(s < material->getNumShaderPasses()) {
                     shaderPass = material->getShaderPass(s);
                     shaderPass = material->getShaderPass(s);
                 } else {
                 } else {
                     shaderPass = buffer->drawCalls[i].shaderPasses[s];
                     shaderPass = buffer->drawCalls[i].shaderPasses[s];
                     graphicsInterface->setBlendingMode(shaderPass.blendingMode);
                     graphicsInterface->setBlendingMode(shaderPass.blendingMode);
                 }
                 }
+                
+                //shaderPass = buffer->drawCalls[i].shaderPasses[s];
+                //graphicsInterface->setBlendingMode(shaderPass.blendingMode);
+                
                 ShaderBinding *localShaderBinding = buffer->drawCalls[i].shaderPasses[s].shaderBinding;
                 ShaderBinding *localShaderBinding = buffer->drawCalls[i].shaderPasses[s].shaderBinding;
 
 
                 if(!shaderPass.shader || !localShaderBinding) {
                 if(!shaderPass.shader || !localShaderBinding) {
@@ -198,10 +201,9 @@ void RenderThread::processDrawBuffer(GPUDrawBuffer *buffer) {
                 }
                 }
                 
                 
                 graphicsInterface->useShader(shaderPass.shader);
                 graphicsInterface->useShader(shaderPass.shader);
-
                 graphicsInterface->setWireframeMode(shaderPass.wireframe);
                 graphicsInterface->setWireframeMode(shaderPass.wireframe);
                 
                 
-                ShaderBinding *materialShaderBinding = material->getShaderBinding(s);
+                ShaderBinding *materialShaderBinding = shaderPass.materialShaderBinding;
 
 
                 // set global params
                 // set global params
                 for(int p=0; p < shaderPass.shader->expectedParams.size(); p++) {
                 for(int p=0; p < shaderPass.shader->expectedParams.size(); p++) {
@@ -482,8 +484,8 @@ Texture *Renderer::createTexture(unsigned int width, unsigned int height, char *
     return texture;
     return texture;
 }
 }
 
 
-RenderBuffer *Renderer::createRenderBuffer(unsigned int width, unsigned int height, bool attachDepthBuffer) {
-    RenderBuffer *buffer = new RenderBuffer(width, height, attachDepthBuffer);
+RenderBuffer *Renderer::createRenderBuffer(unsigned int width, unsigned int height, bool attachDepthBuffer, bool floatingPoint) {
+    RenderBuffer *buffer = new RenderBuffer(width, height, attachDepthBuffer, floatingPoint);
     renderThread->enqueueJob(RenderThread::JOB_CREATE_RENDER_BUFFER, (void*)buffer);
     renderThread->enqueueJob(RenderThread::JOB_CREATE_RENDER_BUFFER, (void*)buffer);
     return buffer;
     return buffer;
 }
 }

+ 0 - 1
src/core/PolySceneEntityInstance.cpp

@@ -492,7 +492,6 @@ Entity *SceneEntityInstance::loadObjectEntryIntoEntity(ObjectEntry *entry, Entit
             
             
 			Camera *camera = new Camera(parentScene);
 			Camera *camera = new Camera(parentScene);
             
             
-            camera->setExposureLevel((*cameraEntry)["exposure"]->NumberVal);
             camera->setClippingPlanes((*cameraEntry)["nearClip"]->NumberVal, (*cameraEntry)["farClip"]->NumberVal);
             camera->setClippingPlanes((*cameraEntry)["nearClip"]->NumberVal, (*cameraEntry)["farClip"]->NumberVal);
             camera->setOrthoMode((*cameraEntry)["ortho"]->boolVal);
             camera->setOrthoMode((*cameraEntry)["ortho"]->boolVal);
             
             

+ 1 - 1
src/core/PolySceneLight.cpp

@@ -80,7 +80,7 @@ void SceneLight::enableShadows(bool val, unsigned int resolution) {
             Services()->getRenderer()->destroyRenderBuffer(shadowMapRenderBuffer);
             Services()->getRenderer()->destroyRenderBuffer(shadowMapRenderBuffer);
         }
         }
         
         
-        shadowMapRenderBuffer = Services()->getRenderer()->createRenderBuffer(resolution, resolution, true);
+        shadowMapRenderBuffer = Services()->getRenderer()->createRenderBuffer(resolution, resolution, true, false);
         
         
 		if(!spotCamera) {
 		if(!spotCamera) {
 			spotCamera = new Camera(parentScene);
 			spotCamera = new Camera(parentScene);

+ 1 - 0
src/core/PolySceneManager.cpp

@@ -86,6 +86,7 @@ void SceneManager::Render(const Polycode::Rectangle &viewport) {
 		if(scenes[i]->isEnabled() && !scenes[i]->isVirtual()) {
 		if(scenes[i]->isEnabled() && !scenes[i]->isVirtual()) {
 			Scene *scene = scenes[i];
 			Scene *scene = scenes[i];
 			if(scene->getActiveCamera()->hasFilterShader()) {
 			if(scene->getActiveCamera()->hasFilterShader()) {
+                scene->getActiveCamera()->setViewport(viewport);                
 				scene->getActiveCamera()->drawFilter(NULL);
 				scene->getActiveCamera()->drawFilter(NULL);
 			} else {
 			} else {
                 scene->getActiveCamera()->setViewport(viewport);
                 scene->getActiveCamera()->setViewport(viewport);

+ 1 - 0
src/core/PolySceneMesh.cpp

@@ -207,6 +207,7 @@ void SceneMesh::setMaterial(Material *material) {
     
     
     for(int i=0; i < material->getNumShaderPasses(); i++)  {
     for(int i=0; i < material->getNumShaderPasses(); i++)  {
         ShaderPass shaderPass = material->getShaderPass(i);
         ShaderPass shaderPass = material->getShaderPass(i);
+        shaderPass.materialShaderBinding = shaderPass.shaderBinding;
         shaderPass.shaderBinding = new ShaderBinding();
         shaderPass.shaderBinding = new ShaderBinding();
         shaderPass.shaderBinding->targetShader = shaderPass.shader;
         shaderPass.shaderBinding->targetShader = shaderPass.shader;
         shaderPass.shaderBinding->addParamPointer(ProgramParam::PARAM_COLOR, "entityColor", &color);
         shaderPass.shaderBinding->addParamPointer(ProgramParam::PARAM_COLOR, "entityColor", &color);

+ 3 - 3
src/core/PolySceneRenderTexture.cpp

@@ -30,9 +30,9 @@
 
 
 using namespace Polycode;
 using namespace Polycode;
 
 
-SceneRenderTexture::SceneRenderTexture(Scene *targetScene, Camera *targetCamera, int renderWidth,int renderHeight, unsigned int textureFormat) : textureFormat(textureFormat) {
+SceneRenderTexture::SceneRenderTexture(Scene *targetScene, Camera *targetCamera, int renderWidth,int renderHeight, bool floatingPoint) : floatingPoint(floatingPoint) {
     
     
-    targetFramebuffer = Services()->getRenderer()->createRenderBuffer(renderWidth, renderHeight, true);
+    targetFramebuffer = Services()->getRenderer()->createRenderBuffer(renderWidth, renderHeight, true, floatingPoint);
     
     
 	this->targetScene = targetScene;
 	this->targetScene = targetScene;
 	this->targetCamera = targetCamera;
 	this->targetCamera = targetCamera;
@@ -47,7 +47,7 @@ void SceneRenderTexture::resizeRenderTexture(int newWidth, int newHeight) {
 
 
 	if(newWidth > 0 && newHeight > 0) {
 	if(newWidth > 0 && newHeight > 0) {
         Services()->getRenderer()->destroyRenderBuffer(targetFramebuffer);
         Services()->getRenderer()->destroyRenderBuffer(targetFramebuffer);
-        targetFramebuffer = Services()->getRenderer()->createRenderBuffer(newWidth, newHeight, true);
+        targetFramebuffer = Services()->getRenderer()->createRenderBuffer(newWidth, newHeight, true, floatingPoint);
 	}
 	}
 }
 }
 	
 	

+ 1 - 0
src/core/PolyShader.cpp

@@ -151,6 +151,7 @@ AttributeBinding *ShaderBinding::getAttributeBindingByName(const String &name) {
 
 
 
 
 LocalShaderParam * ShaderBinding::addParam(int type, const String& name) {
 LocalShaderParam * ShaderBinding::addParam(int type, const String& name) {
+
 	void *defaultData = ProgramParam::createParamData(type);
 	void *defaultData = ProgramParam::createParamData(type);
 	LocalShaderParam *newParam = new LocalShaderParam();
 	LocalShaderParam *newParam = new LocalShaderParam();
 	newParam->data = defaultData;
 	newParam->data = defaultData;

+ 8 - 3
src/core/PolyTexture.cpp

@@ -108,10 +108,15 @@ Texture::Texture(Image *image) : Resource(Resource::RESOURCE_TEXTURE) {
 
 
 }
 }
 
 
-RenderBuffer::RenderBuffer(unsigned int width, unsigned int height, bool attachDepthBuffer) : platformData(NULL), width(width), height(height), depthBufferPlatformData(NULL) {
-    colorTexture = new Texture(width, height, NULL, false, false);
+RenderBuffer::RenderBuffer(unsigned int width, unsigned int height, bool attachDepthBuffer, bool floatingPoint) : platformData(NULL), width(width), height(height), depthBufferPlatformData(NULL), floatingPoint(floatingPoint) {
+    
+    int imageType = Image::IMAGE_RGBA;
+    if(floatingPoint) {
+        imageType = Image::IMAGE_FP16;
+    }
+    colorTexture = new Texture(width, height, NULL, false, false, imageType, true);
     if(attachDepthBuffer) {
     if(attachDepthBuffer) {
-        depthTexture = new Texture(width, height, NULL, false, false);
+        depthTexture = new Texture(width, height, NULL, false, false, Image::IMAGE_RGBA, true);
     } else {
     } else {
         depthTexture = NULL;
         depthTexture = NULL;
     }
     }

+ 4 - 4
src/ide/PolycodeEntityEditor.cpp

@@ -481,7 +481,7 @@ void CameraPreviewWindow::Resize(Number width, Number height) {
         if(renderTexture) {
         if(renderTexture) {
             delete renderTexture;
             delete renderTexture;
         }
         }
-        renderTexture = new SceneRenderTexture(scene, camera, previewRect->getWidth(), previewRect->getHeight());
+        renderTexture = new SceneRenderTexture(scene, camera, previewRect->getWidth(), previewRect->getHeight(), false);
         previewRect->setTexture(renderTexture->getTargetTexture());
         previewRect->setTexture(renderTexture->getTargetTexture());
     }
     }
     pinButton->setPosition(width-70, 3);
     pinButton->setPosition(width-70, 3);
@@ -538,7 +538,7 @@ void CameraPreviewWindow::setCamera(Scene *scene, Camera *camera) {
         if(renderTexture) {
         if(renderTexture) {
             delete renderTexture;
             delete renderTexture;
         }
         }
-        renderTexture = new SceneRenderTexture(scene, camera, previewRect->getWidth(), previewRect->getHeight());
+        renderTexture = new SceneRenderTexture(scene, camera, previewRect->getWidth(), previewRect->getHeight(), false);
         previewRect->setTexture(renderTexture->getTargetTexture());
         previewRect->setTexture(renderTexture->getTargetTexture());
         
         
     } else {
     } else {
@@ -563,7 +563,7 @@ EntityEditorMainView::EntityEditorMainView(PolycodeEditor *editor) {
 //    mainScene->getDefaultCamera()->frustumCulling = false;
 //    mainScene->getDefaultCamera()->frustumCulling = false;
 //    mainScene->doVisibilityChecking(false);
 //    mainScene->doVisibilityChecking(false);
     
     
-	renderTexture = new SceneRenderTexture(mainScene, mainScene->getDefaultCamera(), 512, 512);
+	renderTexture = new SceneRenderTexture(mainScene, mainScene->getDefaultCamera(), 512, 512, false);
 	mainScene->clearColor.setColor(0.2, 0.2, 0.2, 1.0);	
 	mainScene->clearColor.setColor(0.2, 0.2, 0.2, 1.0);	
 	mainScene->useClearColor = true;
 	mainScene->useClearColor = true;
 	mainScene->rootEntity.processInputEvents = true;
 	mainScene->rootEntity.processInputEvents = true;
@@ -2364,7 +2364,7 @@ void PolycodeEntityEditor::saveEntityToObjectEntry(Entity *entity, ObjectEntry *
         
         
         ObjectEntry *cameraEntry = entry->addChild("Camera");
         ObjectEntry *cameraEntry = entry->addChild("Camera");
         
         
-        cameraEntry->addChild("exposure", camera->getExposureLevel());
+        //cameraEntry->addChild("exposure", camera->getExposureLevel());
         cameraEntry->addChild("nearClip", camera->getNearClippingPlane());
         cameraEntry->addChild("nearClip", camera->getNearClippingPlane());
         cameraEntry->addChild("farClip", camera->getFarClippingPlane());
         cameraEntry->addChild("farClip", camera->getFarClippingPlane());
         cameraEntry->addChild("ortho", camera->getOrthoMode());
         cameraEntry->addChild("ortho", camera->getOrthoMode());

+ 3 - 3
src/ide/PolycodeIDEApp.cpp

@@ -32,10 +32,10 @@ Scene *globalScene;
 
 
 #ifdef _WINDOWS
 #ifdef _WINDOWS
 PolycodeIDEApp::PolycodeIDEApp(PolycodeWinIDEView *view) : EventDispatcher() {
 PolycodeIDEApp::PolycodeIDEApp(PolycodeWinIDEView *view) : EventDispatcher() {
-core = new POLYCODE_CORE((PolycodeWinIDEView*)view, 1100, 700,false,false, 0, 0,60, -1, true);
+core = new POLYCODE_CORE((PolycodeWinIDEView*)view, 1100, 700,false,false, 0, 0,60, -1, false);
 #else
 #else
 PolycodeIDEApp::PolycodeIDEApp(PolycodeView *view) : EventDispatcher() {
 PolycodeIDEApp::PolycodeIDEApp(PolycodeView *view) : EventDispatcher() {
-core = new POLYCODE_CORE((PolycodeView*)view, 1100, 700,false,false, 0, 0,60, -1, true);
+core = new POLYCODE_CORE((PolycodeView*)view, 1100, 700,false,false, 0, 0,60, -1, false);
 #endif
 #endif
 	
 	
 //	core->pauseOnLoseFocus = true;
 //	core->pauseOnLoseFocus = true;
@@ -1280,7 +1280,7 @@ void PolycodeIDEApp::applyFinalConfig() {
 		int newYRes = appHeight->intVal;		
 		int newYRes = appHeight->intVal;		
 		if(newXRes > 100 && newYRes > 100) {
 		if(newXRes > 100 && newYRes > 100) {
 			setResFromConfig = true;
 			setResFromConfig = true;
-            core->setVideoMode(newXRes, newYRes, false, true, 0, 0);
+            core->setVideoMode(newXRes, newYRes, false, true, 0, 0, false);
 			frame->Resize(newXRes, newYRes);
 			frame->Resize(newXRes, newYRes);
 		}
 		}
 	}
 	}

+ 3 - 3
src/ide/PolycodeMaterialEditor.cpp

@@ -632,7 +632,7 @@ PostPreviewBox::PostPreviewBox() : UIElement() {
 	cameraExposureInput = new UITextInput(false, 40, 12);
 	cameraExposureInput = new UITextInput(false, 40, 12);
 	addChild(cameraExposureInput);
 	addChild(cameraExposureInput);
 	cameraExposureInput->setPosition(370, 2);
 	cameraExposureInput->setPosition(370, 2);
-	cameraExposureInput->setText(String::NumberToString(previewScene->getDefaultCamera()->getExposureLevel()));	
+//	cameraExposureInput->setText(String::NumberToString(previewScene->getDefaultCamera()->getExposureLevel()));
 	cameraExposureInput->addEventListener(this, UIEvent::CHANGE_EVENT);
 	cameraExposureInput->addEventListener(this, UIEvent::CHANGE_EVENT);
 
 
 	label = new UILabel("LIGHT INT.", 18, "section", Label::ANTIALIAS_FULL);
 	label = new UILabel("LIGHT INT.", 18, "section", Label::ANTIALIAS_FULL);
@@ -696,7 +696,7 @@ void PostPreviewBox::clearMaterial() {
 void PostPreviewBox::handleEvent(Event *event) {
 void PostPreviewBox::handleEvent(Event *event) {
 	if(event->getDispatcher() == cameraExposureInput && event->getEventCode() == UIEvent::CHANGE_EVENT) {
 	if(event->getDispatcher() == cameraExposureInput && event->getEventCode() == UIEvent::CHANGE_EVENT) {
 		Number newExposure = atof(cameraExposureInput->getText().c_str());
 		Number newExposure = atof(cameraExposureInput->getText().c_str());
-		previewScene->getDefaultCamera()->setExposureLevel(newExposure);
+		//previewScene->getDefaultCamera()->setExposureLevel(newExposure);
 	} else if(event->getDispatcher() == lightStrength && event->getEventCode() == UIEvent::CHANGE_EVENT) {
 	} else if(event->getDispatcher() == lightStrength && event->getEventCode() == UIEvent::CHANGE_EVENT) {
 		Number newStrength = atof(lightStrength->getText().c_str());
 		Number newStrength = atof(lightStrength->getText().c_str());
 		mainLight->setIntensity(newStrength);
 		mainLight->setIntensity(newStrength);
@@ -708,7 +708,7 @@ MaterialPreviewBox::MaterialPreviewBox() : UIElement() {
 	currentMaterial = NULL;
 	currentMaterial = NULL;
 	previewScene = new Scene(Scene::SCENE_3D, true);	
 	previewScene = new Scene(Scene::SCENE_3D, true);	
 	
 	
-	renderTexture = new SceneRenderTexture(previewScene, previewScene->getDefaultCamera(), 512, 512);
+	renderTexture = new SceneRenderTexture(previewScene, previewScene->getDefaultCamera(), 512, 512, false);
 	
 	
 	ScenePrimitive *previewBg = new ScenePrimitive(ScenePrimitive::TYPE_BOX, 15.0, 15.0, 15.0);
 	ScenePrimitive *previewBg = new ScenePrimitive(ScenePrimitive::TYPE_BOX, 15.0, 15.0, 15.0);
 	previewBg->Yaw(45.0);
 	previewBg->Yaw(45.0);

+ 1 - 1
src/ide/PolycodeMeshEditor.cpp

@@ -27,7 +27,7 @@ extern UIGlobalMenu *globalMenu;
 PolycodeMeshEditor::PolycodeMeshEditor() : PolycodeEditor(true){
 PolycodeMeshEditor::PolycodeMeshEditor() : PolycodeEditor(true){
 	
 	
 	previewScene = new Scene(Scene::SCENE_3D, true);		
 	previewScene = new Scene(Scene::SCENE_3D, true);		
-	renderTexture = new SceneRenderTexture(previewScene, previewScene->getDefaultCamera(), 512, 512);
+	renderTexture = new SceneRenderTexture(previewScene, previewScene->getDefaultCamera(), 512, 512, false);
     
     
     ownsChildren = true;
     ownsChildren = true;
 
 

+ 9 - 9
src/ide/PolycodeProps.cpp

@@ -1249,7 +1249,7 @@ MaterialProp::MaterialProp(const String &caption) : PropProp(caption, "Material"
 	}
 	}
 	previewScene->addChild(previewBg);
 	previewScene->addChild(previewBg);
 	
 	
-   	renderTexture = new SceneRenderTexture(previewScene, previewScene->getDefaultCamera(), 48*2, 48*2);
+   	renderTexture = new SceneRenderTexture(previewScene, previewScene->getDefaultCamera(), 48*2, 48*2, false);
     
     
 	previewScene->clearColor.setColor(0.1, 0.1, 0.1, 0.0);
 	previewScene->clearColor.setColor(0.1, 0.1, 0.1, 0.0);
 	previewScene->ambientColor.setColor(0.2, 0.2, 0.2, 1.0);
 	previewScene->ambientColor.setColor(0.2, 0.2, 0.2, 1.0);
@@ -1677,7 +1677,7 @@ TargetBindingProp::TargetBindingProp(Shader *shader, Material *material, ShaderB
 	for(int i=0; i < material->getNumShaderRenderTargets(); i++) {
 	for(int i=0; i < material->getNumShaderRenderTargets(); i++) {
 		ShaderRenderTarget *target = material->getShaderRenderTarget(i);		
 		ShaderRenderTarget *target = material->getShaderRenderTarget(i);		
 		targetComboBox->addComboItem(target->id, (void*) target);
 		targetComboBox->addComboItem(target->id, (void*) target);
-		if(targetBinding->texture == target->texture) {
+		if(targetBinding->buffer == target->buffer) {
 			targetComboBox->setSelectedIndex(i);
 			targetComboBox->setSelectedIndex(i);
 		}
 		}
 	}
 	}
@@ -1731,7 +1731,7 @@ void TargetBindingProp::handleEvent(Event *event) {
 		} else {
 		} else {
 			textureComboBox->enabled = true;
 			textureComboBox->enabled = true;
 			textureComboBox->visible = true;
 			textureComboBox->visible = true;
-			binding->setTextureForParam(targetBinding->name, targetBinding->texture);
+			binding->setTextureForParam(targetBinding->name, targetBinding->buffer->colorTexture);
 		}		
 		}		
 		
 		
 		if(typeComboBox->getSelectedIndex() == 2 || typeComboBox->getSelectedIndex() == 3) {
 		if(typeComboBox->getSelectedIndex() == 2 || typeComboBox->getSelectedIndex() == 3) {
@@ -1750,7 +1750,7 @@ void TargetBindingProp::handleEvent(Event *event) {
 		dispatchEvent(new Event(), Event::CHANGE_EVENT);
 		dispatchEvent(new Event(), Event::CHANGE_EVENT);
 	} else if(event->getDispatcher() == targetComboBox && event->getEventCode() == UIEvent::CHANGE_EVENT) {
 	} else if(event->getDispatcher() == targetComboBox && event->getEventCode() == UIEvent::CHANGE_EVENT) {
 		ShaderRenderTarget *target = (ShaderRenderTarget*)targetComboBox->getSelectedItem()->data;		
 		ShaderRenderTarget *target = (ShaderRenderTarget*)targetComboBox->getSelectedItem()->data;		
-		targetBinding->texture = target->texture;
+		targetBinding->buffer = target->buffer;
 		targetBinding->id  = target->id;
 		targetBinding->id  = target->id;
 		
 		
 		binding->removeRenderTargetBinding(targetBinding);		
 		binding->removeRenderTargetBinding(targetBinding);		
@@ -1758,7 +1758,7 @@ void TargetBindingProp::handleEvent(Event *event) {
 
 
 		binding->removeParam(targetBinding->name);
 		binding->removeParam(targetBinding->name);
 		if(targetBinding->mode == RenderTargetBinding::MODE_IN) {
 		if(targetBinding->mode == RenderTargetBinding::MODE_IN) {
-			binding->setTextureForParam(targetBinding->name, targetBinding->texture);
+			binding->setTextureForParam(targetBinding->name, targetBinding->buffer->colorTexture);
 		}
 		}
 		dispatchEvent(new Event(), Event::CHANGE_EVENT);		
 		dispatchEvent(new Event(), Event::CHANGE_EVENT);		
 	} else if(event->getDispatcher() == textureComboBox && event->getEventCode() == UIEvent::CHANGE_EVENT) {
 	} else if(event->getDispatcher() == textureComboBox && event->getEventCode() == UIEvent::CHANGE_EVENT) {
@@ -1768,7 +1768,7 @@ void TargetBindingProp::handleEvent(Event *event) {
 		binding->addRenderTargetBinding(targetBinding);		
 		binding->addRenderTargetBinding(targetBinding);		
 
 
 		binding->removeParam(targetBinding->name);
 		binding->removeParam(targetBinding->name);
-		binding->setTextureForParam(targetBinding->name, targetBinding->texture);
+		binding->setTextureForParam(targetBinding->name, targetBinding->buffer->colorTexture);
 		dispatchEvent(new Event(), Event::CHANGE_EVENT);
 		dispatchEvent(new Event(), Event::CHANGE_EVENT);
 	}
 	}
 }
 }
@@ -2040,7 +2040,7 @@ void TargetBindingsSheet::handleEvent(Event *event) {
 	if(event->getDispatcher() == addButton->getButton()) {
 	if(event->getDispatcher() == addButton->getButton()) {
 		RenderTargetBinding* newBinding = new RenderTargetBinding();
 		RenderTargetBinding* newBinding = new RenderTargetBinding();
 		newBinding->mode = RenderTargetBinding::MODE_COLOR;
 		newBinding->mode = RenderTargetBinding::MODE_COLOR;
-		newBinding->texture = NULL;		
+		newBinding->buffer = NULL;		
 		binding->addRenderTargetBinding(newBinding);				
 		binding->addRenderTargetBinding(newBinding);				
 		refreshTargets();			
 		refreshTargets();			
 		dispatchEvent(new Event(), Event::CHANGE_EVENT);
 		dispatchEvent(new Event(), Event::CHANGE_EVENT);
@@ -3348,7 +3348,7 @@ void CameraSheet::handleEvent(Event *event) {
         camera->setFOV(fovProp->get());
         camera->setFOV(fovProp->get());
         dispatchEvent(new Event(), Event::CHANGE_EVENT);
         dispatchEvent(new Event(), Event::CHANGE_EVENT);
     } else if(event->getDispatcher() == exposureProp) {
     } else if(event->getDispatcher() == exposureProp) {
-        camera->setExposureLevel(exposureProp->get());
+      //  camera->setExposureLevel(exposureProp->get());
         dispatchEvent(new Event(), Event::CHANGE_EVENT);
         dispatchEvent(new Event(), Event::CHANGE_EVENT);
     } else if(event->getDispatcher() == orthoProp) {
     } else if(event->getDispatcher() == orthoProp) {
         camera->setOrthoMode(orthoProp->get());
         camera->setOrthoMode(orthoProp->get());
@@ -3380,7 +3380,7 @@ void CameraSheet::setCamera(Camera *camera) {
     if(camera) {
     if(camera) {
         enabled = true;
         enabled = true;
         
         
-        exposureProp->set(camera->getExposureLevel());
+       // exposureProp->set(camera->getExposureLevel());
         orthoProp->set(camera->getOrthoMode());
         orthoProp->set(camera->getOrthoMode());
         orthoWidthProp->set(camera->getOrthoSizeX());
         orthoWidthProp->set(camera->getOrthoSizeX());
         orthoHeightProp->set(camera->getOrthoSizeY());
         orthoHeightProp->set(camera->getOrthoSizeY());