|
@@ -268,6 +268,7 @@ void tnsShaderMakeIndex(tnsShader *tns){
|
|
|
tns->iShowStripes=glGetUniformLocation(program, "ShowStripes");
|
|
|
if(tns->iTexColor>=0){glUniform1i(tns->iTexColor, 0);}
|
|
|
if(tns->iTexColorMS>=0){glUniform1i(tns->iTexColorMS, 1);}
|
|
|
+ tns->iDoOffset = glGetUniformLocation(program, "DoOffset");
|
|
|
|
|
|
tns->uViewDir = glGetUniformLocation(program, "uViewDir");
|
|
|
tns->uViewPos = glGetUniformLocation(program, "uViewPos");
|
|
@@ -1336,6 +1337,10 @@ void tnsInitBuiltinShaders(){
|
|
|
tnsNewVertexShader(LA_SELECTION_VERTEX_SHADER),
|
|
|
tnsNewFragmentShader(LA_SELECTION_FRAGMENT_SHADER), -1);
|
|
|
|
|
|
+ T->FloorShader = tnsNewShaderProgram(
|
|
|
+ tnsNewVertexShader(LA_FLOOR_VERTEX_SHADER),
|
|
|
+ tnsNewFragmentShader(LA_FLOOR_FRAGMENT_SHADER), -1);
|
|
|
+
|
|
|
tnsUseShader(T->immShader);
|
|
|
tnsEnableShaderv(T->immShader);
|
|
|
}
|
|
@@ -1736,6 +1741,10 @@ void tnsCopyScreenTo2DTexture(tnsTexture *target, int x_lower_left, int y_lower_
|
|
|
tnsUnbindTexture();
|
|
|
}
|
|
|
|
|
|
+void tnsUniformUseOffset(tnsShader* s, int use){
|
|
|
+ glUniform1i(s->iDoOffset,use);
|
|
|
+}
|
|
|
+
|
|
|
void tnsUseMaskTexture(tnsTexture *t){
|
|
|
if(!t){T->StateTextureMode=0; return;}
|
|
|
T->StateTexColor = t; T->StateTextureMode=1;
|
|
@@ -2479,15 +2488,15 @@ tnsOffscreen *tnsCreate2DOffscreen(int glInternalFormat, int w, int h, int Multi
|
|
|
|
|
|
return toff;
|
|
|
}
|
|
|
-tnsOffscreen *tnsCreateDeferredOffscreen(int w, int h){
|
|
|
+tnsOffscreen *tnsCreateDeferredOffscreen(int w, int h, int Multisample){
|
|
|
tnsOffscreen *toff = tnsCreateOffscreenHandle();
|
|
|
tnsTexture *color,*normal,*gpos; tnsTexture *depth;
|
|
|
|
|
|
- color = tnsCreate2DTexture(GL_RGBA8, w, h, 0); tnsAttach2DOffscreenBuffer(toff, GL_COLOR_ATTACHMENT0, color);
|
|
|
- normal = tnsCreate2DTexture(GL_RGB8, w, h, 0); tnsAttach2DOffscreenBuffer(toff, GL_COLOR_ATTACHMENT1, normal);
|
|
|
- gpos = tnsCreate2DTexture(GL_RGB32F, w, h, 0); tnsAttach2DOffscreenBuffer(toff, GL_COLOR_ATTACHMENT2, gpos);
|
|
|
+ color = tnsCreate2DTexture(GL_RGBA8, w, h, Multisample); tnsAttach2DOffscreenBuffer(toff, GL_COLOR_ATTACHMENT0, color);
|
|
|
+ normal = tnsCreate2DTexture(GL_RGB8, w, h, Multisample); tnsAttach2DOffscreenBuffer(toff, GL_COLOR_ATTACHMENT1, normal);
|
|
|
+ gpos = tnsCreate2DTexture(GL_RGB32F, w, h, Multisample); tnsAttach2DOffscreenBuffer(toff, GL_COLOR_ATTACHMENT2, gpos);
|
|
|
|
|
|
- depth = tnsCreate2DTexture(GL_DEPTH_COMPONENT, w, h, 0); tnsAttach2DOffscreenBuffer(toff, GL_DEPTH_ATTACHMENT, depth);
|
|
|
+ depth = tnsCreate2DTexture(GL_DEPTH_COMPONENT, w, h, Multisample); tnsAttach2DOffscreenBuffer(toff, GL_DEPTH_ATTACHMENT, depth);
|
|
|
|
|
|
return toff;
|
|
|
}
|
|
@@ -4361,19 +4370,36 @@ void tnsDrawFloor(int Size, int Span, int *ShowAxis){
|
|
|
int Lim = Span * 2 + 1;
|
|
|
int Dist = Size * Span;
|
|
|
|
|
|
- for (i; i < Lim; i++){
|
|
|
- if (i == Span && ShowAxis[0]) continue;
|
|
|
- tnsVertex3d(-Dist, i * Size - Dist, 0);
|
|
|
- tnsVertex3d(Dist, i * Size - Dist, 0);
|
|
|
- }
|
|
|
+ tnsFlush();
|
|
|
|
|
|
- for (i = 0; i < Lim; i++){
|
|
|
- if (i == Span && ShowAxis[1]) continue;
|
|
|
- tnsVertex3d(i * Size - Dist, -Dist, 0);
|
|
|
- tnsVertex3d(i * Size - Dist, Dist, 0);
|
|
|
- }
|
|
|
+ glEnable(GL_POLYGON_OFFSET_FILL); glPolygonOffset(1,1); glEnable(GL_BLEND);
|
|
|
+ tnsUseShader(T->FloorShader);
|
|
|
+ tnsEnableShaderv(T->FloorShader);
|
|
|
|
|
|
- tnsPackAs(GL_LINES);
|
|
|
+ tnsVertex3d(-10000,10000,0);
|
|
|
+ tnsVertex3d(10000,10000,0);
|
|
|
+ tnsVertex3d(10000,-10000,0);
|
|
|
+ tnsVertex3d(-10000,-10000,0);
|
|
|
+ tnsPackAs(GL_TRIANGLE_FAN);
|
|
|
+ tnsFlush();
|
|
|
+
|
|
|
+ tnsUseShader(T->immShader);
|
|
|
+ tnsEnableShaderv(T->immShader);
|
|
|
+ glDisable(GL_POLYGON_OFFSET_FILL);
|
|
|
+
|
|
|
+ //for (i; i < Lim; i++){
|
|
|
+ // if (i == Span && ShowAxis[0]) continue;
|
|
|
+ // tnsVertex3d(-Dist, i * Size - Dist, 0);
|
|
|
+ // tnsVertex3d(Dist, i * Size - Dist, 0);
|
|
|
+ //}
|
|
|
+//
|
|
|
+ //for (i = 0; i < Lim; i++){
|
|
|
+ // if (i == Span && ShowAxis[1]) continue;
|
|
|
+ // tnsVertex3d(i * Size - Dist, -Dist, 0);
|
|
|
+ // tnsVertex3d(i * Size - Dist, Dist, 0);
|
|
|
+ //}
|
|
|
+
|
|
|
+ //tnsPackAs(GL_LINES);
|
|
|
|
|
|
if (ShowAxis[0]){
|
|
|
tnsColor4d(1, 0, 0, 1);
|