Sfoglia il codice sorgente

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

Marko Pintera 12 anni fa
parent
commit
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.