Bläddra i källkod

Added unlit vertex color material and shader, fixed sprite editor not rendering sprite frame bars properly, fixed UIRect rendering bug

Ivan Safrin 9 år sedan
förälder
incheckning
8c975cc6a9

BIN
assets/default/default.pak


+ 12 - 0
assets/default/default/UnlitVertexColor.frag

@@ -0,0 +1,12 @@
+#ifdef GL_ES
+	precision mediump float;
+#endif
+
+uniform sampler2D diffuse;
+uniform vec4 entityColor;
+varying vec2 texCoordVar;
+varying vec4 varColor;
+
+void main() {
+	gl_FragColor = texture2D(diffuse, texCoordVar) * entityColor * varColor;
+}

+ 21 - 0
assets/default/default/UnlitVertexColor.vert

@@ -0,0 +1,21 @@
+#ifdef GL_ES
+	precision mediump float;
+#endif
+
+attribute vec4 position;
+attribute vec2 texCoord;
+attribute vec4 color;
+
+uniform mat4 modelMatrix;
+uniform mat4 viewMatrix;
+uniform mat4 projectionMatrix;
+varying vec2 texCoordVar;
+varying vec4 varColor;
+
+void main()
+{
+	vec4 p = viewMatrix * modelMatrix  * position;
+	gl_Position = projectionMatrix * p;
+	varColor = color;
+	texCoordVar = texCoord;
+}

+ 11 - 0
assets/default/default/default.mat

@@ -17,6 +17,10 @@
 			<vp source="default/Unlit.vert"/>
 			<fp source="default/Unlit.frag"/>
 		</shader>
+		<shader type="glsl" name="UnlitVertexColor" numPointLights="0" numSpotLights="0">		
+			<vp source="default/UnlitVertexColor.vert"/>
+			<fp source="default/UnlitVertexColor.frag"/>
+		</shader>		
 		<shader type="glsl" name="UnlitPointUntextured" numPointLights="0" numSpotLights="0">		
 			<vp source="default/UnlitPoint.vert"/>
 			<fp source="default/UnlitUntextured.frag"/>
@@ -136,6 +140,13 @@
 					<param name="entityColor" value="1.0 1.0 1.0 1.0" />
 				</params>					
 			</shader>
+		</material>		
+		<material name="UnlitVertexColor">
+			<shader name="UnlitVertexColor">
+				<params>
+					<param name="entityColor" value="1.0 1.0 1.0 1.0" />
+				</params>					
+			</shader>
 		</material>
 		<material name="UnlitWireframe">
 			<shader name="UnlitWireframe" wireframe="true">

+ 1 - 1
include/polycode/ide/PolycodeSpriteEditor.h

@@ -87,7 +87,7 @@ class SpriteSheetEditor : public UIElement {
 	
 		void Update();
 	
-		void Render();
+		void Render(GPUDrawBuffer *buffer);
 	
 		void deleteSelectedFrames();
 	

+ 1 - 1
src/ide/PolycodeFrame.cpp

@@ -1384,7 +1384,7 @@ PolycodeFrame::PolycodeFrame(PolycodeEditorManager *editorManager) : UIElement()
 	
 	modalBlocker = new UIRect(10,10);
 	modalBlocker->setBlendingMode(Renderer::BLEND_MODE_NORMAL);
-	modalBlocker->setColor(0,0,0,0.1);
+	modalBlocker->setColor(0,0,0,0.6);
 	modalBlocker->setAnchorPoint(-1.0, -1.0, 0.0);
 	modalBlocker->enabled = false;	
 	modalBlocker->blockMouseInput = true;

+ 17 - 21
src/ide/PolycodeSpriteEditor.cpp

@@ -35,6 +35,7 @@ SpriteSheetEditor::SpriteSheetEditor(SpriteSet *sprite) : UIElement() {
 	zoomScale = 1.0;
 	drawCall.options.enableScissor = true;
 	
+	Texture::clampDefault = false;
 	previewBg = new UIImage("main/grid_dark.png");
 	addChild(previewBg);
 	previewBg->processInputEvents = true;
@@ -321,6 +322,7 @@ void SpriteSheetEditor::handleEvent(Event *event) {
 		
 		dispatchEvent(new Event(),Event::CHANGE_EVENT);
 	} else if(event->getDispatcher() == bgSelector) {
+		Texture::clampDefault = false;
 		switch(bgSelector->getSelectedIndex()) {
 			case 0:
 				previewBg->loadTexture("main/grid_dark.png");
@@ -666,7 +668,9 @@ void SpriteSheetEditor::Resize(Number width, Number height) {
 	UIElement::Resize(width, height);
 }
 
-void SpriteSheetEditor::Render() {
+void SpriteSheetEditor::Render(GPUDrawBuffer *buffer) {
+	
+	
 	if(sprite->getNumFrames() > 0 && selectedIDs.size() == 1) {
 		
 		transformGrips->visible = true;
@@ -1223,12 +1227,8 @@ void SpriteStateEditBar::refreshBar() {
 		meshTicksGeometry.addVertexWithUV(frameOffset+frameSize-frameGapSize, 0.0, 0.0, 1.0, 0.0);
 		meshTicksGeometry.addColor(vertexColor);
 		
-		
-		meshTicksGeometry.addIndexedFace(offset+0,offset+1);
-		meshTicksGeometry.addIndexedFace(offset+1,offset+2);
-		meshTicksGeometry.addIndexedFace(offset+2,offset+3);
-		meshTicksGeometry.addIndexedFace(offset+3,offset+0);
-		
+		meshTicksGeometry.addIndexedFace(offset+0,offset+1, offset+2);
+		meshTicksGeometry.addIndexedFace(offset+0,offset+2, offset+3);
 		// draw icons
 		
 		Number imageAspectRatio = ((Number)spriteSet->getTexture()->getWidth()) / ((Number)spriteSet->getTexture()->getHeight());
@@ -1250,11 +1250,8 @@ void SpriteStateEditBar::refreshBar() {
 			meshGeometry.addVertexWithUV(frameOffset+iconFrameWidth+iconOffset, -frameTickHeight-frameTickGap-iconFrameHeight-iconOffset, 0.0, frame.coordinates.x+frame.coordinates.w, 1.0- frame.coordinates.y  - frame.coordinates.h);
 			meshGeometry.addVertexWithUV(frameOffset+iconFrameWidth+iconOffset, -frameTickHeight-frameTickGap-iconOffset, 0.0, frame.coordinates.x+frame.coordinates.w, 1.0-frame.coordinates.y);
 			
-			meshGeometry.addIndexedFace(offsetIcon+0,offsetIcon+1);
-			meshGeometry.addIndexedFace(offsetIcon+1,offsetIcon+2);
-			meshGeometry.addIndexedFace(offsetIcon+2,offsetIcon+3);
-			meshGeometry.addIndexedFace(offsetIcon+3,offsetIcon+0);
-			
+			meshGeometry.addIndexedFace(offsetIcon+0,offsetIcon+1, offsetIcon+2);
+			meshGeometry.addIndexedFace(offsetIcon+0,offsetIcon+2, offsetIcon+3);
 			offsetIcon += 4;
 		}
 		
@@ -1279,11 +1276,8 @@ void SpriteStateEditBar::refreshBar() {
 		meshBgGeometry.addColor(bgFrameColor);
 
 		
-		meshBgGeometry.addIndexedFace(offset+0,offset+1);
-		meshBgGeometry.addIndexedFace(offset+1,offset+2);
-		meshBgGeometry.addIndexedFace(offset+2,offset+3);
-		meshBgGeometry.addIndexedFace(offset+3,offset+0);
-		
+		meshBgGeometry.addIndexedFace(offset+0, offset+1, offset+2);
+		meshBgGeometry.addIndexedFace(offset+0, offset+2, offset+3);
 		
 		Number gripWidth = 8;
 		Number gripHeight = 24;
@@ -1296,10 +1290,8 @@ void SpriteStateEditBar::refreshBar() {
 			meshGripsGeometry.addVertexWithUV(frameOffset+frameSize-gapSize, -frameTickHeight-frameTickGap-gripHeight-gripOffset, 0.0, 1.0, 1.0);
 			meshGripsGeometry.addVertexWithUV(frameOffset+frameSize-gapSize, -frameTickHeight-frameTickGap-gripOffset, 0.0, 1.0, 0.0);
 			
-			meshGripsGeometry.addIndexedFace(offsetGrip+0,offsetGrip+1);
-			meshGripsGeometry.addIndexedFace(offsetGrip+1,offsetGrip+2);
-			meshGripsGeometry.addIndexedFace(offsetGrip+2,offsetGrip+3);
-			meshGripsGeometry.addIndexedFace(offsetGrip+3,offsetGrip+0);
+			meshGripsGeometry.addIndexedFace(offsetGrip+0, offsetGrip+1, offsetGrip+2);
+			meshGripsGeometry.addIndexedFace(offsetGrip+0, offsetGrip+2, offsetGrip+3);
 			
 			offsetGrip += 4;
 		}
@@ -1352,20 +1344,24 @@ SpriteStateEditBar::SpriteStateEditBar(SpriteSet *spriteSet) : UIElement() {
 	barBase = new UIElement();
 	
 	barMeshBg = new SceneMesh();
+	barMeshBg->setMaterialByName("UnlitVertexColor");
 	barBase->addChild(barMeshBg);
 	barMeshBg->getShaderPass(0).shaderBinding->loadTextureForParam("diffuse", "spriteEditor/sprite_frame_bg.png");
 	barMeshBg->setBlendingMode(Renderer::BLEND_MODE_NORMAL);
 	
 	barMesh = new SceneMesh();
+	barMesh->setMaterialByName("Unlit");
 	barBase->addChild(barMesh);
 	barMesh->setBlendingMode(Renderer::BLEND_MODE_NORMAL);
 	
 	frameTicksMesh = new SceneMesh();
+	frameTicksMesh->setMaterialByName("UnlitUntexturedVertexColor");
 	barBase->addChild(frameTicksMesh);
 	
 	frameGripsMesh = new SceneMesh();
 	barBase->addChild(frameGripsMesh);
 	frameGripsMesh->setBlendingMode(Renderer::BLEND_MODE_NORMAL);
+	frameGripsMesh->setMaterialByName("Unlit");
 	frameGripsMesh->getShaderPass(0).shaderBinding->loadTextureForParam("diffuse", "spriteEditor/frame_grip.png");
 	
 	this->addEventListener(this, InputEvent::EVENT_MOUSEWHEEL_UP);

+ 2 - 1
src/modules/ui/PolyUIElement.cpp

@@ -235,6 +235,7 @@ void UIRect::setImageCoordinates(Number x, Number y, Number width, Number height
 	
 	rectMeshGeometry.vertexPositionArray.data.clear();
 	rectMeshGeometry.vertexTexCoordArray.data.clear();
+	rectMeshGeometry.indexArray.data.clear();
 	
 	rectMeshGeometry.addVertex(-whalf,-hhalf,0);
 	rectMeshGeometry.addTexCoord(xFloat, (1.0-yFloat) - hFloat);
@@ -363,7 +364,6 @@ void UIRect::Render(GPUDrawBuffer *buffer) {
 	drawCall.submesh = rectMesh->getSubmeshPointer(0);
 	drawCall.material = material;
 	drawCall.shaderPasses = shaderPasses;
-	
 	buffer->drawCalls.push_back(drawCall);
 }
 
@@ -383,6 +383,7 @@ void UIRect::Resize(Number width, Number height) {
 	rectMeshGeometry.addVertex(-whalf+width,-hhalf+height,0);
 	rectMeshGeometry.addVertex(-whalf,-hhalf+height,0);
 	
+	rectMeshGeometry.indexArray.data.clear();
 	rectMeshGeometry.addIndexedFace(0, 1, 2);
 	rectMeshGeometry.addIndexedFace(0, 2, 3);