Prechádzať zdrojové kódy

Fixed dynamic module loading in IDE/Player, added scene import setting to asset import dialog, added default skybox and cubemap lighting materials

Ivan Safrin 11 rokov pred
rodič
commit
b88112247e

BIN
Assets/Default asset pack/default.pak


+ 20 - 1
Assets/Default asset pack/default/LightCube.frag

@@ -2,10 +2,29 @@ uniform samplerCube lightCube;
 varying vec4 vertexColor;
 varying vec4 vertexColor;
 varying vec3 normal;
 varying vec3 normal;
 uniform vec4 ambient_color;
 uniform vec4 ambient_color;
+varying vec3 worldNormal;
+
+uniform float lightFactor;
+
+vec3 hash3( float n )
+{
+    return fract(sin(vec3(n,n+1.0,n+2.0))*vec3(43758.5453123,22578.1459123,19642.3490423));
+}
 
 
 void main()
 void main()
 {
 {
-    vec4 texColor = textureCube(lightCube, normal);
+	vec3 col = vec3(0.0);
+	for( int i=0; i<32; i++ )
+	{			
+		vec3 rr = normalize(-1.0 + 2.0*hash3(float(i)*123.5463));
+		rr = normalize( worldNormal + 7.0*rr );
+		rr = rr * sign(dot(worldNormal,rr));
+        col += pow( textureCube( lightCube, rr ).xyz, vec3(2.2) ) * dot(rr,worldNormal);
+	}
+
+	col = col * lightFactor;
+
+    vec4 texColor = vec4(col, 1.0);
 
 
     vec4 color = vec4(1.0,1.0,1.0,1.0) + ambient_color; 	           
     vec4 color = vec4(1.0,1.0,1.0,1.0) + ambient_color; 	           
     color = clamp((color*vertexColor*texColor), 0.0, 1.0);  
     color = clamp((color*vertexColor*texColor), 0.0, 1.0);  

+ 28 - 0
Assets/Default asset pack/default/LightCube.vert

@@ -0,0 +1,28 @@
+varying vec3 normal;
+varying vec3 worldNormal;
+varying vec4 pos;
+varying vec4 rawpos;
+varying vec4 vertexColor;
+
+uniform mat4 modelMatrix;
+
+mat3 mat3_emu(mat4 m4) {
+  return mat3(
+      m4[0][0], m4[0][1], m4[0][2],
+      m4[1][0], m4[1][1], m4[1][2],
+      m4[2][0], m4[2][1], m4[2][2]);
+}
+
+void main() {
+	normal = gl_NormalMatrix * gl_Normal;
+
+	mat3 rotN = mat3_emu(modelMatrix);
+	worldNormal = rotN * gl_Normal;
+	worldNormal = normalize(worldNormal);
+
+	gl_Position = ftransform();
+	pos = gl_ModelViewMatrix * gl_Vertex;
+	rawpos = gl_Vertex;
+    vertexColor = gl_Color;
+	gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
+}

+ 28 - 0
Assets/Default asset pack/default/SkyBox.frag

@@ -0,0 +1,28 @@
+uniform samplerCube lightCube;
+varying vec4 vertexColor;
+varying vec3 normal;
+uniform vec4 ambient_color;
+varying vec3 worldNormal;
+
+void main()
+{
+    vec4 texColor = textureCube(lightCube, worldNormal * -1.0);
+
+    vec4 color = vec4(1.0,1.0,1.0,1.0) + ambient_color; 	           
+    color = clamp((color*vertexColor*texColor), 0.0, 1.0);  
+
+    // fog
+	const float LOG2 = 1.442695;
+	float z = gl_FragCoord.z / gl_FragCoord.w;
+	float fogFactor = exp2( -gl_Fog.density * 
+				   gl_Fog.density * 
+				   z * 
+				   z * 
+				   LOG2 );
+
+	fogFactor = clamp(fogFactor, 0.0, 1.0);
+	color = mix(gl_Fog.color, color, fogFactor );   
+
+	color.a = vertexColor.a * texColor.a;    
+    gl_FragColor = color;
+}

+ 11 - 1
Assets/Default asset pack/default/default.mat

@@ -34,8 +34,12 @@
 			<fp source="default/UnlitUntextured.frag"/>
 			<fp source="default/UnlitUntextured.frag"/>
 		</shader>		
 		</shader>		
 		<shader type="glsl" name="LightCube" numPointLights="0" numSpotLights="0">		
 		<shader type="glsl" name="LightCube" numPointLights="0" numSpotLights="0">		
-			<vp source="default/DefaultShader.vert"/>
+			<vp source="default/LightCube.vert"/>
 			<fp source="default/LightCube.frag"/>
 			<fp source="default/LightCube.frag"/>
+		</shader>
+		<shader type="glsl" name="SkyBox" numPointLights="0" numSpotLights="0">		
+			<vp source="default/LightCube.vert"/>
+			<fp source="default/SkyBox.frag"/>
 		</shader>		
 		</shader>		
 		<shader type="glsl" name="NorColSpec" numPointLights="4" numSpotLights="2">		
 		<shader type="glsl" name="NorColSpec" numPointLights="4" numSpotLights="2">		
 			<vp source="default/NormalShader.vert"/>
 			<vp source="default/NormalShader.vert"/>
@@ -129,6 +133,12 @@
 				</textures>				
 				</textures>				
 			</shader>
 			</shader>
 		</material>
 		</material>
+		<material name="SkyBox">
+			<shader name="SkyBox">
+				<textures>
+				</textures>				
+			</shader>
+		</material>		
 		<material name="NormalColorSpecular">
 		<material name="NormalColorSpecular">
 			<shader name="NorColSpec">
 			<shader name="NorColSpec">
 				<textures>
 				<textures>

+ 5 - 3
Bindings/Scripts/create_lua_library/create_lua_library.py

@@ -78,9 +78,9 @@ def createLUABindings(inputPath, prefix, mainInclude, libSmallName, libName, api
 	cppRegisterOut += "using namespace Polycode;\n\n"
 	cppRegisterOut += "using namespace Polycode;\n\n"
 	cppRegisterOut += "int luaopen_%s(lua_State *L) {\n" % (prefix)
 	cppRegisterOut += "int luaopen_%s(lua_State *L) {\n" % (prefix)
 
 
-#	if prefix != "Polycode":
-#		cppRegisterOut += "CoreServices *inst = (CoreServices*) *((void**)lua_touserdata(L, 1));\n"
-#		cppRegisterOut += "CoreServices::setInstance(inst);\n"
+	if prefix != "Polycode" and prefix != "Physics2D" and prefix != "Physics3D" and prefix != "UI":
+		cppRegisterOut += "CoreServices *inst = (CoreServices*) *((PolyBase**)lua_touserdata(L, 1));\n"
+		cppRegisterOut += "CoreServices::setInstance(inst);\n"
 	cppRegisterOut += "\tstatic const struct luaL_reg %sLib [] = {" % (libSmallName)
 	cppRegisterOut += "\tstatic const struct luaL_reg %sLib [] = {" % (libSmallName)
 	
 	
 	wrappersHeaderOut += "#pragma once\n\n"
 	wrappersHeaderOut += "#pragma once\n\n"
@@ -112,6 +112,8 @@ def createLUABindings(inputPath, prefix, mainInclude, libSmallName, libName, api
 	for fileName in files:
 	for fileName in files:
 		if inputPathIsDir:
 		if inputPathIsDir:
 			fileName = "%s/%s" % (inputPath, fileName)
 			fileName = "%s/%s" % (inputPath, fileName)
+		if os.path.isdir(fileName):
+			continue
 		head, tail = os.path.split(fileName)
 		head, tail = os.path.split(fileName)
 		ignore = ["PolyTween", "PolyTweenManager", "PolyGLSLProgram", "PolyGLSLShader", "PolyGLSLShaderModule", "PolyWinCore", "PolyCocoaCore", "PolyAGLCore", "PolySDLCore", "Poly_iPhone", "PolyGLES1Renderer", "PolyGLRenderer", "tinyxml", "tinystr", "OpenGLCubemap", "PolyiPhoneCore", "PolyGLES1Texture", "PolyGLTexture", "PolyGLVertexBuffer", "PolyThreaded", "PolyGLHeaders", "GLee", "PolyPeer", "PolySocket", "PolyClient", "PolyServer", "PolyServerWorld", "OSFILE", "OSFileEntry", "OSBasics", "PolyLogger", "PolyFontGlyphSheet"]
 		ignore = ["PolyTween", "PolyTweenManager", "PolyGLSLProgram", "PolyGLSLShader", "PolyGLSLShaderModule", "PolyWinCore", "PolyCocoaCore", "PolyAGLCore", "PolySDLCore", "Poly_iPhone", "PolyGLES1Renderer", "PolyGLRenderer", "tinyxml", "tinystr", "OpenGLCubemap", "PolyiPhoneCore", "PolyGLES1Texture", "PolyGLTexture", "PolyGLVertexBuffer", "PolyThreaded", "PolyGLHeaders", "GLee", "PolyPeer", "PolySocket", "PolyClient", "PolyServer", "PolyServerWorld", "OSFILE", "OSFileEntry", "OSBasics", "PolyLogger", "PolyFontGlyphSheet"]
 		if tail.split(".")[1] == "h" and tail.split(".")[0] not in ignore:
 		if tail.split(".")[1] == "h" and tail.split(".")[0] not in ignore:

+ 1 - 1
Core/Contents/Source/PolyCoreServices.cpp

@@ -52,7 +52,7 @@ CoreMutex *CoreServices::getRenderMutex() {
 
 
 void CoreServices::setInstance(CoreServices *_instance) {
 void CoreServices::setInstance(CoreServices *_instance) {
 	overrideInstance = _instance;
 	overrideInstance = _instance;
-	Logger::log("Overriding core instance...\n");
+	Logger::log("Overriding core instance to %d...\n", _instance);
 }
 }
 
 
 CoreServices* CoreServices::getInstance() {
 CoreServices* CoreServices::getInstance() {

+ 1 - 1
IDE/Contents/Include/PolycodeToolLauncher.h

@@ -53,7 +53,7 @@ class PolycodeToolLauncher {
 		static void openExternalEditor(String app, String file, String inFolder);
 		static void openExternalEditor(String app, String file, String inFolder);
 		static String generateTempPath(PolycodeProject *project);
 		static String generateTempPath(PolycodeProject *project);
 		static void buildProject(PolycodeProject *project, String destinationPath, bool compileScripts);
 		static void buildProject(PolycodeProject *project, String destinationPath, bool compileScripts);
-		static String importAssets(String sourceFile, String inFolder, bool addMeshes, String prefix, bool swapZY, bool generateNormals, bool generateTangents, bool listOnly,bool writeNormals, bool writeTangents, bool writeColors, bool writeBoneWeights, bool writeUVs, bool writeSecondaryUVs);
+		static String importAssets(String sourceFile, String inFolder, bool addMeshes, String prefix, bool swapZY, bool generateNormals, bool generateTangents, bool listOnly,bool writeNormals, bool writeTangents, bool writeColors, bool writeBoneWeights, bool writeUVs, bool writeSecondaryUVs, bool exportScene);
 
 
 		static void runPolyapp(String polyappPath);
 		static void runPolyapp(String polyappPath);
 };
 };

+ 1 - 0
IDE/Contents/Include/ToolWindows.h

@@ -120,6 +120,7 @@ class AssetImporterWindow : public UIWindow {
         UICheckBox *exportBoneWeights;
         UICheckBox *exportBoneWeights;
         UICheckBox *exportUVs;
         UICheckBox *exportUVs;
         UICheckBox *exportSecondaryUVs;
         UICheckBox *exportSecondaryUVs;
+        UICheckBox *exportScene;
     
     
 		Entity *filesAnchor;
 		Entity *filesAnchor;
 		UIScrollContainer *filesScroller;
 		UIScrollContainer *filesScroller;

+ 1 - 1
IDE/Contents/Source/PolycodeMaterialEditor.cpp

@@ -241,7 +241,7 @@ CubemapEditorPane::CubemapEditorPane(ResourcePool *resourcePool) : UIElement() {
 	baseProps->propHeight = 420;
 	baseProps->propHeight = 420;
 	propList->updateProps();
 	propList->updateProps();
 		
 		
-	Material *previewMaterial = (Material*) CoreServices::getInstance()->getResourceManager()->getGlobalPool()->getResource(Resource::RESOURCE_MATERIAL, "LightCube");
+	Material *previewMaterial = (Material*) CoreServices::getInstance()->getResourceManager()->getGlobalPool()->getResource(Resource::RESOURCE_MATERIAL, "SkyBox");
 	cubemapPreview->setMaterial(previewMaterial);
 	cubemapPreview->setMaterial(previewMaterial);
 	enabled = false;
 	enabled = false;
 	
 	

+ 2 - 5
IDE/Contents/Source/PolycodeProject.cpp

@@ -159,18 +159,15 @@ bool PolycodeProject::saveFile() {
 		configFile.root["modules"]->Clear();
 		configFile.root["modules"]->Clear();
 	}
 	}
 	
 	
-	/*
+
 	for(int j=0; j < data.modules.size(); j++) {
 	for(int j=0; j < data.modules.size(); j++) {
 		if(!configFile.root["modules"]) {
 		if(!configFile.root["modules"]) {
 			configFile.root.addChild("modules");			
 			configFile.root.addChild("modules");			
 		}	
 		}	
 		configFile.root["modules"]->type = ObjectEntry::ARRAY_ENTRY;
 		configFile.root["modules"]->type = ObjectEntry::ARRAY_ENTRY;
 		configFile.root["modules"]->addChild("module", data.modules[j]);
 		configFile.root["modules"]->addChild("module", data.modules[j]);
-		
-		CoreServices::getInstance()->getResourceManager()->addArchive("Standalone/Modules/"+data.modules[j]+"/API");
-		
+				
 	}
 	}
-	*/
 	
 	
 	if(configFile.root["fonts"]) {
 	if(configFile.root["fonts"]) {
 		configFile.root["fonts"]->Clear();
 		configFile.root["fonts"]->Clear();

+ 4 - 2
IDE/Contents/Source/PolycodeToolLauncher.cpp

@@ -113,7 +113,7 @@ void PolycodeToolLauncher::buildProject(PolycodeProject *project, String destina
 
 
 }
 }
 
 
-String PolycodeToolLauncher::importAssets(String sourceFile, String inFolder, bool addMeshes, String prefix, bool swapZY, bool generateNormals, bool generateTangents, bool listOnly, bool writeNormals, bool writeTangents, bool writeColors, bool writeBoneWeights, bool writeUVs, bool writeSecondaryUVs) {
+String PolycodeToolLauncher::importAssets(String sourceFile, String inFolder, bool addMeshes, String prefix, bool swapZY, bool generateNormals, bool generateTangents, bool listOnly, bool writeNormals, bool writeTangents, bool writeColors, bool writeBoneWeights, bool writeUVs, bool writeSecondaryUVs, bool exportScene) {
 
 
 	String ret;
 	String ret;
 	String polycodeBasePath = CoreServices::getInstance()->getCore()->getDefaultWorkingDirectory();
 	String polycodeBasePath = CoreServices::getInstance()->getCore()->getDefaultWorkingDirectory();
@@ -152,7 +152,9 @@ String PolycodeToolLauncher::importAssets(String sourceFile, String inFolder, bo
     if(writeSecondaryUVs) {
     if(writeSecondaryUVs) {
 		args = "-v "+args;
 		args = "-v "+args;
     }
     }
-    
+    if(exportScene) {
+		args = "-e "+args;
+    }
 	if(prefix != "") {
 	if(prefix != "") {
 		args = "-p "+prefix+" "+args;
 		args = "-p "+prefix+" "+args;
 	}
 	}

+ 10 - 6
IDE/Contents/Source/ToolWindows.cpp

@@ -197,7 +197,7 @@ YesNoCancelPopup::~YesNoCancelPopup() {
 	
 	
 }
 }
 
 
-AssetImporterWindow::AssetImporterWindow() : UIWindow("3D Asset Importer", 650, 250) {
+AssetImporterWindow::AssetImporterWindow() : UIWindow("3D Asset Importer", 650, 280) {
 	filesToImportLabel = new UILabel("Files that will be imported:", 12);
 	filesToImportLabel = new UILabel("Files that will be imported:", 12);
 	addChild(filesToImportLabel);
 	addChild(filesToImportLabel);
 	filesToImportLabel->setPosition(padding, 35);
 	filesToImportLabel->setPosition(padding, 35);
@@ -211,12 +211,12 @@ AssetImporterWindow::AssetImporterWindow() : UIWindow("3D Asset Importer", 650,
 	cancelButton = new UIButton(L"Cancel", 100);
 	cancelButton = new UIButton(L"Cancel", 100);
 	cancelButton->addEventListener(this, UIEvent::CLICK_EVENT);
 	cancelButton->addEventListener(this, UIEvent::CLICK_EVENT);
 	addChild(cancelButton);
 	addChild(cancelButton);
-	cancelButton->setPosition(padding+650-100-100-10-10, 235);
+	cancelButton->setPosition(padding+650-100-100-10-10, 265);
 	
 	
 	okButton = new UIButton(L"OK", 100);
 	okButton = new UIButton(L"OK", 100);
 	okButton->addEventListener(this, UIEvent::CLICK_EVENT);
 	okButton->addEventListener(this, UIEvent::CLICK_EVENT);
 	addChild(okButton);
 	addChild(okButton);
-	okButton->setPosition(padding+650-100-10, 235);
+	okButton->setPosition(padding+650-100-10, 265);
 	
 	
 	closeOnEscape = true;
 	closeOnEscape = true;
 
 
@@ -267,9 +267,13 @@ AssetImporterWindow::AssetImporterWindow() : UIWindow("3D Asset Importer", 650,
 	exportUVs->setPosition(520, 150);
 	exportUVs->setPosition(520, 150);
 	addChild(exportUVs);
 	addChild(exportUVs);
     
     
-    exportSecondaryUVs = new UICheckBox("Secondary UVs", true);
+    exportSecondaryUVs = new UICheckBox("Secondary UVs", false);
 	exportSecondaryUVs->setPosition(520, 180);
 	exportSecondaryUVs->setPosition(520, 180);
 	addChild(exportSecondaryUVs);
 	addChild(exportSecondaryUVs);
+
+    exportScene = new UICheckBox("Export Entity file", false);
+	exportScene->setPosition(520, 210);
+	addChild(exportScene);
     
     
 }
 }
 
 
@@ -283,7 +287,7 @@ void AssetImporterWindow::handleEvent(Event *event) {
 		if(usePrefixCheckbox->isChecked() && prefixInput->getText() != "") {
 		if(usePrefixCheckbox->isChecked() && prefixInput->getText() != "") {
 			prefixString = prefixInput->getText().replace(" ", "_");
 			prefixString = prefixInput->getText().replace(" ", "_");
 		}
 		}
-		PolycodeToolLauncher::importAssets(file, folder, addMeshesCheckbox->isChecked(), prefixString, swapZYAxisCheckbox->isChecked(), generateNormalsCheckbox->isChecked(), generateTangensCheckbox->isChecked(), false, exportNormals->isChecked(), exportTangents->isChecked(), exportColors->isChecked(), exportBoneWeights->isChecked(), exportUVs->isChecked(), exportSecondaryUVs->isChecked());
+		PolycodeToolLauncher::importAssets(file, folder, addMeshesCheckbox->isChecked(), prefixString, swapZYAxisCheckbox->isChecked(), generateNormalsCheckbox->isChecked(), generateTangensCheckbox->isChecked(), false, exportNormals->isChecked(), exportTangents->isChecked(), exportColors->isChecked(), exportBoneWeights->isChecked(), exportUVs->isChecked(), exportSecondaryUVs->isChecked(), exportScene->isChecked());
 	
 	
 		dispatchEvent(new UIEvent(), UIEvent::OK_EVENT);
 		dispatchEvent(new UIEvent(), UIEvent::OK_EVENT);
 		dispatchEvent(new UIEvent(), UIEvent::CLOSE_EVENT);	
 		dispatchEvent(new UIEvent(), UIEvent::CLOSE_EVENT);	
@@ -329,7 +333,7 @@ void AssetImporterWindow::refreshPreview() {
 	if(usePrefixCheckbox->isChecked() && prefixInput->getText() != "") {
 	if(usePrefixCheckbox->isChecked() && prefixInput->getText() != "") {
 		prefixString = prefixInput->getText().replace(" ", "_");
 		prefixString = prefixInput->getText().replace(" ", "_");
 	}
 	}
-	String fileList = PolycodeToolLauncher::importAssets(file, folder, addMeshesCheckbox->isChecked(), prefixString, swapZYAxisCheckbox->isChecked(), generateNormalsCheckbox->isChecked(), generateTangensCheckbox->isChecked(), true, false, false, false, false, false, false);
+	String fileList = PolycodeToolLauncher::importAssets(file, folder, addMeshesCheckbox->isChecked(), prefixString, swapZYAxisCheckbox->isChecked(), generateNormalsCheckbox->isChecked(), generateTangensCheckbox->isChecked(), true, false, false, false, false, false, false, false);
 	setFilesToImport(fileList);		
 	setFilesToImport(fileList);		
 }
 }
 
 

+ 2 - 0
Modules/Contents/OculusVR/PolycodeOVR.h

@@ -20,6 +20,8 @@
  THE SOFTWARE.
  THE SOFTWARE.
  */
  */
 
 
+#pragma once
+
  #include "OVR.h"
  #include "OVR.h"
  #include "Polycode.h"
  #include "Polycode.h"
 
 

+ 8 - 17
Player/Contents/Source/PolycodePlayer.cpp

@@ -101,7 +101,7 @@ extern "C" {
 		defaultPath.append(module);
 		defaultPath.append(module);
 		
 		
 		const char* fullPath = module.c_str();		
 		const char* fullPath = module.c_str();		
-//		Logger::log("Loading custom class: %s\n", module.c_str());
+        Logger::log("Loading custom class: %s\n", module.c_str());
 
 
 		OSFILE *inFile = OSBasics::open(module, "r");	
 		OSFILE *inFile = OSBasics::open(module, "r");	
 		
 		
@@ -367,9 +367,9 @@ extern "C" {
 		luaopen_Physics2D(L);
 		luaopen_Physics2D(L);
 		luaopen_Physics3D(L);
 		luaopen_Physics3D(L);
 		luaopen_UI(L);
 		luaopen_UI(L);
-		
-				
-		/*		
+        
+        printf("CORE SERVICES: %d\n", CoreServices::getInstance());
+
 		for(int i=0; i < loadedModules.size(); i++) {
 		for(int i=0; i < loadedModules.size(); i++) {
 			String moduleName = loadedModules[i];
 			String moduleName = loadedModules[i];
 #ifdef _WINDOWS
 #ifdef _WINDOWS
@@ -398,24 +398,15 @@ extern "C" {
 			lua_pushstring(L, moduleLoadCall.c_str());			
 			lua_pushstring(L, moduleLoadCall.c_str());			
 			lua_call(L, 2, 2);
 			lua_call(L, 2, 2);
 			
 			
-			lua_setfield(L, LUA_GLOBALSINDEX, "err");								
-			lua_setfield(L, LUA_GLOBALSINDEX, "f");		
-
-//			lua_getfield(L, LUA_GLOBALSINDEX, "print");
-//			lua_getfield(L, LUA_GLOBALSINDEX, "err");						
-//			lua_call(L, 1, 0);						
-
+			lua_setfield(L, LUA_GLOBALSINDEX, "err");
+			lua_setfield(L, LUA_GLOBALSINDEX, "f");
 			printf("SETTING CORE SERVICES\n");			
 			printf("SETTING CORE SERVICES\n");			
 			lua_getfield(L, LUA_GLOBALSINDEX, "f");
 			lua_getfield(L, LUA_GLOBALSINDEX, "f");
-			lua_getfield(L, LUA_GLOBALSINDEX, "__core__services__instance");						
+			lua_getfield(L, LUA_GLOBALSINDEX, "__core__services__instance");
 			lua_call(L, 1, 0);			
 			lua_call(L, 1, 0);			
 			
 			
-			printf("DONE LOADING MODULE...\n");				
-			//local f = package.loadlib("/Users/ivansafrin/Desktop/Workshop/HelloPolycodeLUA/libPolycode2DPhysicsModule.dylib", "luaopen_Physics2D")
-			//f(Polycore.CoreServices_getInstance())
-					
+			printf("DONE LOADING MODULE...\n");
 		}
 		}
-*/
 
 
 		doneLoading = true;
 		doneLoading = true;