| 
					
				 | 
			
			
				@@ -29,6 +29,33 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #define HF 0.5 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#ifdef LA_USE_GLES 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void la_glUniform1f(int location, float v0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    glUniform1fv(location,1,&v0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void tnsGet2DTextureSubImage(tnsTexture* t, int xoffset, int yoffset, uint32_t width, uint32_t height, int format, int type, size_t bufSize, void *pixels){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    int texture=t->GLTexHandle; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#ifdef LA_USE_GLES 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    int offscreen_framebuffer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    glGenFramebuffers(1, &offscreen_framebuffer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    glBindFramebuffer(GL_FRAMEBUFFER, offscreen_framebuffer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    glBindTexture(GL_TEXTURE_2D, texture); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(status != GL_FRAMEBUFFER_COMPLETE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        logPrint("Failed to make complete framebuffer object in la_glGetTextureSubImage()", status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    glBindFramebuffer(GL_FRAMEBUFFER, offscreen_framebuffer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    glViewport(0, 0, t->Width, t->Height); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    glReadPixels(0, 0, width, height, format, type, pixels); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    glGetTextureSubImage(texture,0,xoffset,yoffset,0,width,height,1,format,type,bufSize,pixels); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //  1  2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // 7 9 11     13  14 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //  3  4 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -285,9 +312,13 @@ void tnsShaderMakeIndex(tnsShader *tns){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     tns->iUV = glGetAttribLocation(program, "vUV"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     tns->iTexColor = glGetUniformLocation(program, "TexColor"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tns->iTexColorU = glGetUniformLocation(program, "TexColorUI"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tns->iTexColorMS = glGetUniformLocation(program, "TexColorMS"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(tns->iTexColor>=0){glUniform1i(tns->iTexColor, 0);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(tns->iTexColorMS>=0){glUniform1i(tns->iTexColorMS, 1);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(tns->iTexColorU>=0){glUniform1i(tns->iTexColorU, 2);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     tns->iTexNormal = glGetUniformLocation(program, "TexNormal"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     tns->iTexGPos = glGetUniformLocation(program, "TexGPos"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    tns->iTexColorMS = glGetUniformLocation(program, "TexColorMS"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     tns->iMultiplyColor = glGetUniformLocation(program, "MultiplyColor"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     tns->iTextureMode = glGetUniformLocation(program, "TextureMode"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     tns->iColorMode = glGetUniformLocation(program, "ColorMode"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -300,8 +331,6 @@ void tnsShaderMakeIndex(tnsShader *tns){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     tns->iComposing=glGetUniformLocation(program, "Composing"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     tns->iComposingGamma=glGetUniformLocation(program, "ComposingGamma"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     tns->iComposingBlackpoint=glGetUniformLocation(program, "ComposingBlackpoint"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if(tns->iTexColor>=0){glUniform1i(tns->iTexColor, 0);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if(tns->iTexColorMS>=0){glUniform1i(tns->iTexColorMS, 1);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     tns->iDoOffset = glGetUniformLocation(program, "DoOffset"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     tns->iUseHalftone = glGetUniformLocation(program, "UseHalftone"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     tns->iHalftoneSize = glGetUniformLocation(program, "HalftoneSize"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1740,12 +1769,17 @@ void tnsConfigure2DTexture(tnsTexture *t){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             t->GLTexBitsType==GL_DEPTH_COMPONENT24||t->GLTexBitsType==GL_DEPTH_COMPONENT32F; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         int format=isDepth?GL_DEPTH_COMPONENT:(t->GLTexBitsType==GL_R8?GL_RED:(t->GLTexBitsType==GL_RG8?GL_RG:(t->GLTexBitsType==GL_RGB8?GL_RGB:GL_RGBA))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         int type=isDepth?GL_UNSIGNED_INT:GL_UNSIGNED_BYTE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(t->GLTexBitsType==GL_RGBA16UI){ format=GL_RGBA_INTEGER; type=GL_UNSIGNED_SHORT; t->IsUIntTexture=1; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(t->GLTexBitsType==GL_RGBA16F){ format=GL_RGBA; type=GL_FLOAT; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(t->GLTexBitsType==GL_DEPTH_STENCIL){ format=GL_DEPTH_STENCIL; type=GL_UNSIGNED_INT_24_8; t->GLTexBitsType=GL_DEPTH24_STENCIL8; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifndef LAGUI_ANDROID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(isDepth){t->GLTexBitsType=GL_DEPTH_COMPONENT24; type=GL_UNSIGNED_INT;} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(t->Multisample) glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, t->Multisample, t->GLTexBitsType, t->Width, t->Height, GL_TRUE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else{ glTexImage2D(GL_TEXTURE_2D, 0, t->GLTexBitsType, t->Width, t->Height, 0, format, type, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(t->IsUIntTexture){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                glTexStorage2D(GL_TEXTURE_2D, 1,t->GLTexBitsType,t->Width, t->Height); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             int a=glGetError(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1839,6 +1873,7 @@ void tnsUseMaskTexture(tnsTexture *t){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void tnsUseTexture(tnsTexture *t){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if(!t){T->StateTextureMode=0; return;} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(t->IsUIntTexture){ T->StateTexColor = t; T->StateTextureMode=4; return; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if(t->GLTexType == GL_TEXTURE_2D){ T->StateTexColor = t; T->StateTextureMode=2; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifndef LAGUI_ANDROID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     else if(t->GLTexType == GL_TEXTURE_2D_MULTISAMPLE){ T->StateTexColor = t; T->StateTextureMode=3; } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1869,6 +1904,7 @@ void tnsActiveTexture(GLenum tex){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void tnsBindTexture(tnsTexture *t){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if ((!t) || T->TexColor==t) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(t->IsUIntTexture){ tnsActiveTexture(GL_TEXTURE2); glBindTexture(t->GLTexType, t->GLTexHandle); T->TexColor=t; return; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if(t->GLTexType == GL_TEXTURE_2D){ tnsActiveTexture(GL_TEXTURE0); glBindTexture(t->GLTexType, t->GLTexHandle); T->TexColor=t;} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifndef LAGUI_ANDROID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     elif(t->GLTexType == GL_TEXTURE_2D_MULTISAMPLE){ tnsActiveTexture(GL_TEXTURE1); glBindTexture(t->GLTexType, t->GLTexHandle); T->TexColor=t;} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1883,6 +1919,7 @@ void tnsUnbindTexture(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if(T->TexRenderbuffer){ if(T->TexRenderbuffer->GLTexType == GL_RENDERBUFFER){ glBindRenderbufferEXT(GL_RENDERBUFFER, 0); T->TexRenderbuffer=0;}} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if(T->TexColor){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(T->TexColor->IsUIntTexture){ tnsActiveTexture(GL_TEXTURE2); glBindTexture(T->TexColor->GLTexType, 0); T->TexColor=0; return; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(T->TexColor->GLTexType == GL_TEXTURE_2D){tnsActiveTexture(GL_TEXTURE0);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifndef LAGUI_ANDROID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else if(T->TexColor->GLTexType == GL_TEXTURE_2D_MULTISAMPLE){tnsActiveTexture(GL_TEXTURE1);} 
			 |