瀏覽代碼

GUI rendered to render texture had written alpha, which made the render texture blend with the background, which is wrong

Marko Pintera 12 年之前
父節點
當前提交
b1f9869f71

+ 2 - 0
BansheeEngine/Source/BsD3D11BuiltinMaterialFactory.cpp

@@ -139,6 +139,7 @@ namespace BansheeEngine
 		desc.renderTargetDesc[0].srcBlend = BF_SOURCE_ALPHA;
 		desc.renderTargetDesc[0].dstBlend = BF_INV_SOURCE_ALPHA;
 		desc.renderTargetDesc[0].blendOp = BO_ADD;
+		desc.renderTargetDesc[0].renderTargetWriteMask = 0x7; // Don't write to alpha
 
 		HBlendState blendState = BlendState::create(desc);
 		newPass->setBlendState(blendState);
@@ -208,6 +209,7 @@ namespace BansheeEngine
 		desc.renderTargetDesc[0].srcBlend = BF_SOURCE_ALPHA;
 		desc.renderTargetDesc[0].dstBlend = BF_INV_SOURCE_ALPHA;
 		desc.renderTargetDesc[0].blendOp = BO_ADD;
+		desc.renderTargetDesc[0].renderTargetWriteMask = 0x7; // Don't write to alpha
 
 		HBlendState blendState = BlendState::create(desc);
 		newPass->setBlendState(blendState);

+ 2 - 0
BansheeEngine/Source/BsD3D9BuiltinMaterialFactory.cpp

@@ -138,6 +138,7 @@ namespace BansheeEngine
 		desc.renderTargetDesc[0].srcBlend = BF_SOURCE_ALPHA;
 		desc.renderTargetDesc[0].dstBlend = BF_INV_SOURCE_ALPHA;
 		desc.renderTargetDesc[0].blendOp = BO_ADD;
+		desc.renderTargetDesc[0].renderTargetWriteMask = 0x7; // Don't write to alpha
 
 		HBlendState blendState = BlendState::create(desc);
 		newPass->setBlendState(blendState);
@@ -206,6 +207,7 @@ namespace BansheeEngine
 		desc.renderTargetDesc[0].srcBlend = BF_SOURCE_ALPHA;
 		desc.renderTargetDesc[0].dstBlend = BF_INV_SOURCE_ALPHA;
 		desc.renderTargetDesc[0].blendOp = BO_ADD;
+		desc.renderTargetDesc[0].renderTargetWriteMask = 0x7; // Don't write to alpha
 
 		HBlendState blendState = BlendState::create(desc);
 		newPass->setBlendState(blendState);

+ 2 - 0
BansheeEngine/Source/BsGLBuiltinMaterialFactory.cpp

@@ -141,6 +141,7 @@ namespace BansheeEngine
 		desc.renderTargetDesc[0].srcBlend = BF_SOURCE_ALPHA;
 		desc.renderTargetDesc[0].dstBlend = BF_INV_SOURCE_ALPHA;
 		desc.renderTargetDesc[0].blendOp = BO_ADD;
+		desc.renderTargetDesc[0].renderTargetWriteMask = 0x7; // Don't write to alpha
 
 		HBlendState blendState = BlendState::create(desc);
 		newPass->setBlendState(blendState);
@@ -212,6 +213,7 @@ namespace BansheeEngine
 		desc.renderTargetDesc[0].srcBlend = BF_SOURCE_ALPHA;
 		desc.renderTargetDesc[0].dstBlend = BF_INV_SOURCE_ALPHA;
 		desc.renderTargetDesc[0].blendOp = BO_ADD;
+		desc.renderTargetDesc[0].renderTargetWriteMask = 0x7; // Don't write to alpha
 
 		HBlendState blendState = BlendState::create(desc);
 		newPass->setBlendState(blendState);

+ 2 - 2
CamelotClient/CamelotClient.cpp

@@ -35,9 +35,9 @@
 #include "CmRTTIType.h"
 #include "CmPlatform.h"
 
-//#define DX11
+#define DX11
 //#define DX9
-#define GL
+//#define GL
 
 using namespace CamelotFramework;
 using namespace BansheeEditor;

+ 2 - 1
TODO.txt

@@ -8,13 +8,14 @@ LONGTERM TODO:
   - When building a profiler have main Profiler class which just does measurements, then ProfilerOverlay for data display on-screen, ProfilerEditor for Unity-like Profiler, etc.
   - For now just create a profiler with basic measuring stats (FPS, core & sim thread time, plus times for most important systems), and ProfilerOverlay to display them
 
+WEEKEND - Finish up docking? Or get windows dock manager working
+
 PROFILER:
  TODO: Profiler is right now including windows.h. I need to work around that but don't feel like bothering with it atm
   - Easy way would be to move CPUProfiler outside of Utility and into Core (PROBABLY THE WAY TO DO IT - No point in wasting time on this)
   - Complex way would be to edit Timer and remove all the excess crap from it and just leave basic begin/end queries
  - When rendering GUI in front of scene view it seems to be rendering before the actual scene
   - This probably because the render texture alpha is less than 1, which makes it blend with the surface below it
- - Main window renders before the GUI render texture!
 
 TODO: Viewport can be modified from the sim thread, but is used on the core thread without any syncronization mechanisms. Maybe add a method that returns VIEWPORT_DATA, and have that used on the core thread.