Просмотр исходного кода

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 лет назад
Родитель
Сommit
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 vec3 normal;
 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()
 {
-    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; 	           
     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"/>
 		</shader>		
 		<shader type="glsl" name="LightCube" numPointLights="0" numSpotLights="0">		
-			<vp source="default/DefaultShader.vert"/>
+			<vp source="default/LightCube.vert"/>
 			<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 type="glsl" name="NorColSpec" numPointLights="4" numSpotLights="2">		
 			<vp source="default/NormalShader.vert"/>
@@ -129,6 +133,12 @@
 				</textures>				
 			</shader>
 		</material>
+		<material name="SkyBox">
+			<shader name="SkyBox">
+				<textures>
+				</textures>				
+			</shader>
+		</material>		
 		<material name="NormalColorSpecular">
 			<shader name="NorColSpec">
 				<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 += "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)
 	
 	wrappersHeaderOut += "#pragma once\n\n"
@@ -112,6 +112,8 @@ def createLUABindings(inputPath, prefix, mainInclude, libSmallName, libName, api
 	for fileName in files:
 		if inputPathIsDir:
 			fileName = "%s/%s" % (inputPath, fileName)
+		if os.path.isdir(fileName):
+			continue
 		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"]
 		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) {
 	overrideInstance = _instance;
-	Logger::log("Overriding core instance...\n");
+	Logger::log("Overriding core instance to %d...\n", _instance);
 }
 
 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 String generateTempPath(PolycodeProject *project);
 		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);
 };

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

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

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

@@ -241,7 +241,7 @@ CubemapEditorPane::CubemapEditorPane(ResourcePool *resourcePool) : UIElement() {
 	baseProps->propHeight = 420;
 	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);
 	enabled = false;
 	

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

@@ -159,18 +159,15 @@ bool PolycodeProject::saveFile() {
 		configFile.root["modules"]->Clear();
 	}
 	
-	/*
+
 	for(int j=0; j < data.modules.size(); j++) {
 		if(!configFile.root["modules"]) {
 			configFile.root.addChild("modules");			
 		}	
 		configFile.root["modules"]->type = ObjectEntry::ARRAY_ENTRY;
 		configFile.root["modules"]->addChild("module", data.modules[j]);
-		
-		CoreServices::getInstance()->getResourceManager()->addArchive("Standalone/Modules/"+data.modules[j]+"/API");
-		
+				
 	}
-	*/
 	
 	if(configFile.root["fonts"]) {
 		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 polycodeBasePath = CoreServices::getInstance()->getCore()->getDefaultWorkingDirectory();
@@ -152,7 +152,9 @@ String PolycodeToolLauncher::importAssets(String sourceFile, String inFolder, bo
     if(writeSecondaryUVs) {
 		args = "-v "+args;
     }
-    
+    if(exportScene) {
+		args = "-e "+args;
+    }
 	if(prefix != "") {
 		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);
 	addChild(filesToImportLabel);
 	filesToImportLabel->setPosition(padding, 35);
@@ -211,12 +211,12 @@ AssetImporterWindow::AssetImporterWindow() : UIWindow("3D Asset Importer", 650,
 	cancelButton = new UIButton(L"Cancel", 100);
 	cancelButton->addEventListener(this, UIEvent::CLICK_EVENT);
 	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->addEventListener(this, UIEvent::CLICK_EVENT);
 	addChild(okButton);
-	okButton->setPosition(padding+650-100-10, 235);
+	okButton->setPosition(padding+650-100-10, 265);
 	
 	closeOnEscape = true;
 
@@ -267,9 +267,13 @@ AssetImporterWindow::AssetImporterWindow() : UIWindow("3D Asset Importer", 650,
 	exportUVs->setPosition(520, 150);
 	addChild(exportUVs);
     
-    exportSecondaryUVs = new UICheckBox("Secondary UVs", true);
+    exportSecondaryUVs = new UICheckBox("Secondary UVs", false);
 	exportSecondaryUVs->setPosition(520, 180);
 	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() != "") {
 			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::CLOSE_EVENT);	
@@ -329,7 +333,7 @@ void AssetImporterWindow::refreshPreview() {
 	if(usePrefixCheckbox->isChecked() && prefixInput->getText() != "") {
 		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);		
 }
 

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

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

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

@@ -101,7 +101,7 @@ extern "C" {
 		defaultPath.append(module);
 		
 		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");	
 		
@@ -367,9 +367,9 @@ extern "C" {
 		luaopen_Physics2D(L);
 		luaopen_Physics3D(L);
 		luaopen_UI(L);
-		
-				
-		/*		
+        
+        printf("CORE SERVICES: %d\n", CoreServices::getInstance());
+
 		for(int i=0; i < loadedModules.size(); i++) {
 			String moduleName = loadedModules[i];
 #ifdef _WINDOWS
@@ -398,24 +398,15 @@ extern "C" {
 			lua_pushstring(L, moduleLoadCall.c_str());			
 			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");			
 			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);			
 			
-			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;