Explorar el Código

WIP: macOS port
- Various fixes

Marko Pintera hace 7 años
padre
commit
b8cc94a4ef

+ 4 - 1
Source/BansheeCore/Private/MacOS/BsMacOSPlatform.mm

@@ -722,7 +722,10 @@ namespace bs
 		if(mData->clipboardChangeCount != changeCount)
 		{
 			NSString* string = [mData->platformManager getClipboardText];
-			String utf8String = [string UTF8String];
+			String utf8String;
+
+			if(string)
+				utf8String = [string UTF8String];
 
 			{
 				Lock lock(mData->clipboardMutex);

+ 2 - 2
Source/BansheeGLRenderAPI/BsGLPixelBuffer.cpp

@@ -512,13 +512,13 @@ namespace bs { namespace ct
 			glBindFramebuffer(GL_FRAMEBUFFER, readFBO);
 			BS_CHECK_GL_ERROR();
 
-			src->bindToFramebuffer(0, 0, true);
+			src->bindToFramebuffer(GL_COLOR_ATTACHMENT0, 0, false);
 
 			// Attach destination texture
 			glBindFramebuffer(GL_FRAMEBUFFER, drawFBO);
 			BS_CHECK_GL_ERROR();
 
-			bindToFramebuffer(0, 0, true);
+			bindToFramebuffer(GL_COLOR_ATTACHMENT0, 0, false);
 
 			// Perform blit
 			glBindFramebuffer(GL_READ_FRAMEBUFFER, readFBO);

+ 6 - 3
Source/BansheeGLRenderAPI/BsGLTexture.cpp

@@ -81,9 +81,12 @@ namespace bs { namespace ct
 		glBindTexture(getGLTextureTarget(), mTextureID);
 		BS_CHECK_GL_ERROR();
 
-		// This needs to be set otherwise the texture doesn't get rendered
-		glTexParameteri(getGLTextureTarget(), GL_TEXTURE_MAX_LEVEL, numMips - 1);
-		BS_CHECK_GL_ERROR();
+		if(mProperties.getNumSamples() <= 1)
+		{
+			// This needs to be set otherwise the texture doesn't get rendered
+			glTexParameteri(getGLTextureTarget(), GL_TEXTURE_MAX_LEVEL, numMips - 1);
+			BS_CHECK_GL_ERROR();
+		}
 
 		// Allocate internal buffer so that glTexSubImageXD can be used
 		mGLFormat = GLPixelUtil::getGLInternalFormat(mInternalFormat, mProperties.isHardwareGammaEnabled());

+ 1 - 9
Source/BansheeGLRenderAPI/GLSL/BsGLSLGpuProgram.cpp

@@ -210,7 +210,7 @@ namespace bs { namespace ct
 			strcat(versionDefine, VERSION_CHARS);
 			strcat(versionDefine, "\n");
 
-			static const char* EXTRA_LINES[] = 
+			const char* EXTRA_LINES[] =
 				{ 
 					"#define OPENGL\n",
 					versionDefine
@@ -249,14 +249,6 @@ namespace bs { namespace ct
 
 			mCompileError = "";
 			mIsCompiled = !checkForGLSLError(mGLHandle, mCompileError);
-
-
-
-			// DEBUG ONLY
-			if(!mIsCompiled)
-			{
-				LOGWRN(mCompileError);
-			}
 		}
 
 		if (mIsCompiled)

+ 1 - 9
Source/BansheeGLRenderAPI/MacOS/BsMacOSContext.mm

@@ -17,15 +17,7 @@ namespace bs::ct
 
 	MacOSContext::MacOSContext(bool depthStencil, UINT32 msaaCount)
 	{ @autoreleasepool {
-		NSOpenGLPixelFormatAttribute attributes[] =
-		{
-			NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion4_1Core,
-			NSOpenGLPFADoubleBuffer,
-			NSOpenGLPFAAccelerated,
-			NSOpenGLPFADepthSize, depthStencil ? 24U : 0U,
-			NSOpenGLPFAStencilSize, depthStencil ? 8U : 0U,
-			NSOpenGLPFASampleBuffers, msaaCount > 1 ? 1U : 0U,
-		};
+		NSOpenGLPixelFormatAttribute attributes[17];
 
 		UINT32 attrIdx = 0;
 

+ 1 - 1
Source/BansheeSL/BsSLFXCompiler.cpp

@@ -582,6 +582,7 @@ namespace bs
 		outputDesc.sourceCode = &output;
 		outputDesc.options.autoBinding = isVulkan;
 		outputDesc.options.autoBindingStartSlot = startBindingSlot;
+		outputDesc.options.fragmentLocations = true;
 		outputDesc.options.separateShaders = true;
 		outputDesc.options.separateSamplers = false;
 		outputDesc.nameMangling.inputPrefix = "bs_";
@@ -600,7 +601,6 @@ namespace bs
 		case CrossCompileOutput::VKSL45: 
 			outputDesc.shaderVersion = Xsc::OutputShaderVersion::VKSL450;
 			break;
-		default: ;
 		}
 
 		XscLog log;

+ 60 - 10
Source/Examples/ExampleLowLevelRendering/Main.cpp

@@ -70,7 +70,7 @@ namespace bs
 			// Ensure all parent systems are initialized first
 			Application::onStartUp();
 
-			// Get the primary window that was created during start-up. This will be the final desination for all our
+			// Get the primary window that was created during start-up. This will be the final destination for all our
 			// rendering.
 			SPtr<RenderWindow> renderWindow = getPrimaryWindow();
 
@@ -178,7 +178,7 @@ namespace bs { namespace ct
 		GPU_PROGRAM_DESC vertProgDesc;
 		vertProgDesc.type = GPT_VERTEX_PROGRAM;
 		vertProgDesc.entryPoint = "main";
-		vertProgDesc.language = gUseHLSL ? "hlsl" : gUseVKSL ? "vksl" : "glsl";
+		vertProgDesc.language = gUseHLSL ? "hlsl" : gUseVKSL ? "vksl" : "glsl4_1";
 		vertProgDesc.source = vertProgSrc;
 
 		SPtr<GpuProgram> vertProg = GpuProgram::create(vertProgDesc);
@@ -189,7 +189,7 @@ namespace bs { namespace ct
 		GPU_PROGRAM_DESC fragProgDesc;
 		fragProgDesc.type = GPT_FRAGMENT_PROGRAM;
 		fragProgDesc.entryPoint = "main";
-		fragProgDesc.language = gUseHLSL ? "hlsl" : gUseVKSL ? "vksl" : "glsl";
+		fragProgDesc.language = gUseHLSL ? "hlsl" : gUseVKSL ? "vksl" : "glsl4_1";
 		fragProgDesc.source = fragProgSrc;
 
 		SPtr<GpuProgram> fragProg = GpuProgram::create(fragProgDesc);
@@ -459,25 +459,25 @@ void main(
 
 			return src;
 		}
-		else
+		else if(gUseVKSL)
 		{
 			static const char* src = R"(
 layout (binding = 0, std140) uniform Params
 {
 	mat4 gMatWVP;
 	vec4 gTint;
-};		
+};
 
 layout (location = 0) in vec3 bs_position;
 layout (location = 1) in vec2 bs_texcoord0;
-	
+
 layout (location = 0) out vec2 texcoord0;
 
 out gl_PerVertex
 {
 	vec4 gl_Position;
 };
-	
+
 void main()
 {
 	gl_Position = gMatWVP * vec4(bs_position.xyz, 1);
@@ -487,6 +487,33 @@ void main()
 
 			return src;
 		}
+		else
+		{
+			static const char* src = R"(
+layout (std140) uniform Params
+{
+	mat4 gMatWVP;
+	vec4 gTint;
+};
+
+in vec3 bs_position;
+in vec2 bs_texcoord0;
+
+out vec2 texcoord0;
+
+out gl_PerVertex
+{
+	vec4 gl_Position;
+};
+
+void main()
+{
+	gl_Position = gMatWVP * vec4(bs_position.xyz, 1);
+	texcoord0 = bs_texcoord0;
+}
+)";
+			return src;
+		}
 	}
 
 	const char* getFragmentProgSource()
@@ -512,17 +539,17 @@ float4 main(in float4 inPos : SV_Position, float2 uv : TEXCOORD0) : SV_Target
 
 			return src;
 		}
-		else
+		else if(gUseVKSL)
 		{
 			static const char* src = R"(
 layout (binding = 0, std140) uniform Params
 {
 	mat4 gMatWVP;
 	vec4 gTint;
-};	
+};
 
 layout (binding = 1) uniform sampler2D gMainTexture;
-	
+
 layout (location = 0) in vec2 texcoord0;
 layout (location = 0) out vec4 fragColor;
 
@@ -535,6 +562,29 @@ void main()
 
 			return src;
 		}
+		else
+		{
+
+			static const char* src = R"(
+layout (std140) uniform Params
+{
+	mat4 gMatWVP;
+	vec4 gTint;
+};
+
+uniform sampler2D gMainTexture;
+
+in vec2 texcoord0;
+out vec4 fragColor;
+
+void main()
+{
+	vec4 color = texture(gMainTexture, texcoord0.st);
+	fragColor = color * gTint;
+}
+)";
+			return src;
+		}
 	}
 
 	Matrix4 createWorldViewProjectionMatrix()