ソースを参照

Point rendering fixes, IDE fixes

Ivan Safrin 10 年 前
コミット
d5ac504b08

BIN
assets/default/default.pak


+ 17 - 0
assets/default/default/UnlitPoint.vert

@@ -0,0 +1,17 @@
+#ifdef GLES2
+	precision mediump float;
+#endif
+
+attribute vec4 position;
+uniform float pointSize;
+
+uniform mat4 modelMatrix;
+uniform mat4 viewMatrix;
+uniform mat4 projectionMatrix;
+
+void main()
+{
+	vec4 p = viewMatrix * modelMatrix  * position;
+	gl_Position = projectionMatrix * p;
+	gl_PointSize = pointSize;
+}

+ 10 - 2
assets/default/default/default.mat

@@ -9,6 +9,10 @@
 			<vp source="default/Unlit.vert"/>
 			<fp source="default/Unlit.frag"/>
 		</shader>
+		<shader type="glsl" name="UnlitPointUntextured" numPointLights="0" numSpotLights="0">		
+			<vp source="default/UnlitPoint.vert"/>
+			<fp source="default/UnlitUntextured.frag"/>
+		</shader>
 		<shader type="glsl" name="UnlitUntextured" numPointLights="0" numSpotLights="0">		
 			<vp source="default/UnlitUntextured.vert"/>
 			<fp source="default/UnlitUntextured.frag"/>
@@ -31,14 +35,18 @@
 			<shader name="Unlit">
 			</shader>
 		</material>
+		<material name="UnlitPointUntextured">
+			<shader name="UnlitPointUntextured">
+			</shader>
+		</material>		
 		<material name="UnlitUntextured">
 			<shader name="UnlitUntextured">
 			</shader>
-		</material>	
+		</material>
 		<material name="UnlitUntexturedVertexColor">
 			<shader name="UnlitUntexturedVertexColor">
 			</shader>
-		</material>			
+		</material>
 		<material name="UnlitWireframe">
 			<shader name="UnlitWireframe" wireframe="true">
 			</shader>

+ 4 - 0
assets/ide/Materials/utils.mat

@@ -5,6 +5,10 @@
             <vp source="default/DefaultShader.vert" />
             <fp source="Materials/OneSidedLine.frag" />
         </shader>
+        <shader type="glsl" name="PointShader" numAreaLights="0" numSpotLights="0" screen="false">
+            <vp source="default/DefaultShader.vert" />
+            <fp source="Materials/OneSidedLine.frag" />
+        </shader>        
     </shaders>
     <cubemaps />
     <materials>

+ 1 - 0
include/polycode/core/PolyOpenGLGraphicsInterface.h

@@ -32,6 +32,7 @@ THE SOFTWARE.
 	#include <OpenGL/gl.h>
 	#include <OpenGL/glext.h>
 	#include <OpenGL/glu.h>
+
 #elif PLATFORM == PLATFORM_WINDOWS
 
 	#include <GLES2/gl2.h>

+ 0 - 5
include/polycode/core/PolySceneMesh.h

@@ -164,11 +164,6 @@ namespace Polycode {
              */
 			bool lineSmooth;
 			
-            /**
-             * Point size for point-based meshes.
-             */
-			Number pointSize;
-        
             /**
              * If setto true, will antialias points in a point-based mesh. Defaults to false.
              */

+ 2 - 0
src/core/PolyOpenGLGraphicsInterface.cpp

@@ -221,6 +221,8 @@ void OpenGLGraphicsInterface::beginDrawCall() {
     if(lineSmooth) {
         glEnable(GL_LINE_SMOOTH);
     }
+    glEnable(GL_POINT_SPRITE);
+    glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
 #endif
 }
 

+ 1 - 0
src/core/PolyParticleEmitter.cpp

@@ -219,6 +219,7 @@ void SceneParticleEmitter::rebuildParticles(GPUDrawBuffer *buffer) {
                 }
                 mesh->addVertexWithUV(vertexPosition.x, vertexPosition.y, vertexPosition.z, 0.5, 0.5);
                 mesh->addColor(particles[i].color);
+                mesh->indexedMesh = false;
             }
         }
         break;

+ 0 - 3
src/core/PolySceneMesh.cpp

@@ -50,7 +50,6 @@ SceneMesh::SceneMesh(const String& fileName) : Entity(), material(NULL), skeleto
 	ownsMesh = true;
 	ownsSkeleton = true;
 	lineWidth = 1.0;
-	pointSize = 1.0;
 	pointSmooth = false;
 	useGeometryHitDetection = false;
     backfaceCulled = true;
@@ -67,7 +66,6 @@ SceneMesh::SceneMesh(Mesh *mesh) : Entity(), material(NULL), skeleton(NULL), ske
 	ownsMesh = true;
 	ownsSkeleton = true;	
 	lineWidth = 1.0;
-	pointSize = 1.0;
 	pointSmooth = false;
 	useGeometryHitDetection = false;
     backfaceCulled = true;
@@ -140,7 +138,6 @@ void SceneMesh::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly)
     
     _clone->lineWidth = lineWidth;
     _clone->lineSmooth = lineSmooth;
-    _clone->pointSize = pointSize;
     _clone->pointSmooth = pointSmooth;
     _clone->ownsMesh = ownsMesh;
 	_clone->alphaTest = alphaTest;

+ 9 - 4
src/ide/PolycodeEntityEditor.cpp

@@ -104,16 +104,20 @@ CurveDisplay::CurveDisplay(Scene *parentScene, SceneCurve *curve) : DummyTargetE
     mainPoints = new SceneMesh(Mesh::POINT_MESH);
     mainPoints->setColor(0.0, 0.5, 1.0, 1.0);
     addChild(mainPoints);
-    mainPoints->pointSize = 10.0;
     mainPoints->pointSmooth = true;
     mainPoints->setForceMaterial(true);
+    mainPoints->setMaterialByName("UnlitPointUntextured");
+    mainPoints->getShaderPass(0).shaderBinding->addParam(ProgramParam::PARAM_NUMBER, "pointSize")->setNumber(10.0);
+    mainPoints->getMesh()->indexedMesh = false;
     
     controlPoints = new SceneMesh(Mesh::POINT_MESH);
     controlPoints->setColor(1.0, 0.7, 0.0, 1.0);
     addChild(controlPoints);
-    controlPoints->pointSize = 8.0;
     controlPoints->pointSmooth = true;
     controlPoints->setForceMaterial(true);
+    controlPoints->setMaterialByName("UnlitPointUntextured");
+    controlPoints->getShaderPass(0).shaderBinding->addParam(ProgramParam::PARAM_NUMBER, "pointSize")->setNumber(8.0);
+    controlPoints->getMesh()->indexedMesh = false;
     
     renderControlPoints = false;
     
@@ -1789,11 +1793,12 @@ void EntityEditorMainView::setOverlayWireframeRecursive(Entity *targetEntity, bo
                 wireframePass.blendingMode = Renderer::BLEND_MODE_NORMAL;
                 wireframePass.setExpectedAttributes(sceneMesh->getMesh());
                 wireframePass.shaderBinding->addParam(ProgramParam::PARAM_COLOR, "wireframeColor")->setColor(Color(0.5, 0.6, 1.0, 0.75));
-
                 
                 sceneMesh->addShaderPass(wireframePass);
             } else {
-                sceneMesh->removeShaderPass(sceneMesh->getNumShaderPasses()-1);
+                if(sceneMesh->getNumShaderPasses() > 1) {
+                    sceneMesh->removeShaderPass(sceneMesh->getNumShaderPasses()-1);
+                }
             }
         }
         

+ 3 - 2
src/ide/PolycodeProps.cpp

@@ -222,11 +222,11 @@ PropSheet::PropSheet(String caption, String type) : UIElement() {
 	bg->color.setColorHexFromString(CoreServices::getInstance()->getConfig()->getStringValue("Polycode", "uiSmallHeaderBgColor"));
 	bg->setAnchorPoint(-1.0, -1.0, 0.0);
 	
-	SceneLabel *label = new SceneLabel(caption, 18, "section", Label::ANTIALIAS_FULL);
+	SceneLabel *label = new SceneLabel(caption, 16, "section", Label::ANTIALIAS_FULL);
     label->color.setColorHexFromString(CoreServices::getInstance()->getConfig()->getStringValue("Polycode", "uiSectionFontColor"));
     label->setBlendingMode(Renderer::BLEND_MODE_NORMAL);
 	addChild(label);
-	label->setPosition(25, 3);	
+	label->setPosition(25, 5);
 	
 	contents = new UIElement();
 	contents->processInputEvents = true;
@@ -2398,6 +2398,7 @@ void ShaderOptionsSheet::setOptionsFromParams(std::vector<ProgramParam> &params)
 }
 
 void ShaderOptionsSheet::setShader(Shader *shader, Material *material, ShaderBinding *binding) {
+    
 	clearShader();
 	this->shader = shader;
 	this->material = material;