fixes, part 2
This commit is contained in:
parent
0154bd9744
commit
60fc4bc096
|
@ -86,21 +86,22 @@ uniform vec3 normalUniform;
|
||||||
#endif
|
#endif
|
||||||
#ifdef CC_fog
|
#ifdef CC_fog
|
||||||
uniform vec4 fogColor;
|
uniform vec4 fogColor;
|
||||||
uniform int fogMode;
|
//X = uniform float fogMode;
|
||||||
uniform float fogStart;
|
//Y = uniform float fogStart;
|
||||||
uniform float fogEnd;
|
//Z = uniform float fogEnd - fogStart;
|
||||||
uniform float fogDensity;
|
//W = uniform float fogDensity;
|
||||||
uniform float fogPremultiply;
|
uniform vec4 fogParam;
|
||||||
#endif
|
#endif
|
||||||
uniform vec4 colorUniform;
|
uniform vec4 colorUniform;
|
||||||
#ifdef CC_alphatest
|
#ifdef CC_alphatest
|
||||||
uniform float alphaTestF;
|
uniform float alphaTestF;
|
||||||
#endif
|
#endif
|
||||||
#ifdef CC_TEX_GEN_STRQ
|
#ifdef CC_TEX_GEN_STRQ
|
||||||
uniform int textureGenS_M;
|
//uniform int textureGenS_M;
|
||||||
uniform int textureGenT_M;
|
//uniform int textureGenT_M;
|
||||||
uniform int textureGenR_M;
|
//uniform int textureGenR_M;
|
||||||
uniform int textureGenQ_M;
|
//uniform int textureGenQ_M;
|
||||||
|
uniform ivec4 textureGen_M;
|
||||||
uniform vec4 textureGenS_V;
|
uniform vec4 textureGenS_V;
|
||||||
uniform vec4 textureGenT_V;
|
uniform vec4 textureGenT_V;
|
||||||
uniform vec4 textureGenR_V;
|
uniform vec4 textureGenR_V;
|
||||||
|
@ -144,10 +145,10 @@ void main(){
|
||||||
texSrc[1] = v_position;
|
texSrc[1] = v_position;
|
||||||
|
|
||||||
vec4 texPos;
|
vec4 texPos;
|
||||||
texPos.x = dot(texSrc[textureGenS_M], textureGenS_V);
|
texPos.x = dot(texSrc[textureGen_M.x], textureGenS_V);
|
||||||
texPos.y = dot(texSrc[textureGenT_M], textureGenT_V);
|
texPos.y = dot(texSrc[textureGen_M.y], textureGenT_V);
|
||||||
texPos.z = dot(texSrc[textureGenR_M], textureGenR_V);
|
texPos.z = dot(texSrc[textureGen_M.z], textureGenR_V);
|
||||||
texPos.w = dot(texSrc[textureGenQ_M], textureGenQ_V);
|
texPos.w = dot(texSrc[textureGen_M.w], textureGenQ_V);
|
||||||
texPos = matrix_t * texPos;
|
texPos = matrix_t * texPos;
|
||||||
color *= texture(tex0, texPos.xy / texPos.w).bgra;
|
color *= texture(tex0, texPos.xy / texPos.w).bgra;
|
||||||
#ifdef CC_alphatest
|
#ifdef CC_alphatest
|
||||||
|
@ -210,7 +211,7 @@ void main(){
|
||||||
|
|
||||||
#ifdef CC_fog
|
#ifdef CC_fog
|
||||||
float dist = sqrt(dot(v_position, v_position));
|
float dist = sqrt(dot(v_position, v_position));
|
||||||
float i = fogMode == 1 ? (dist - fogStart) / (fogEnd - fogStart) : 1.0 - exp(-fogDensity * dist);
|
float i = fogParam.x == 1.0 ? (dist - fogParam.y) / fogParam.z : 1.0 - exp(-fogParam.w * dist);
|
||||||
color.rgb = mix(color.rgb, fogColor.xyz, clamp(i, 0.0, 1.0) * fogColor.a);
|
color.rgb = mix(color.rgb, fogColor.xyz, clamp(i, 0.0, 1.0) * fogColor.a);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -133,100 +133,131 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
|
|
||||||
public static final boolean isWebGL = _wisWebGL();
|
public static final boolean isWebGL = _wisWebGL();
|
||||||
|
|
||||||
private static final GLObjectMap<TextureGL> texObjects = new GLObjectMap(256);
|
static final GLObjectMap<TextureGL> texObjects = new GLObjectMap(256);
|
||||||
|
|
||||||
private static boolean enableTexture2D = false;
|
static boolean enableTexture2D = false;
|
||||||
private static boolean enableTexture2D_1 = false;
|
static boolean enableTexture2D_1 = false;
|
||||||
private static boolean enableLighting = false;
|
static boolean enableLighting = false;
|
||||||
private static boolean enableAlphaTest = false;
|
static boolean enableAlphaTest = false;
|
||||||
private static float alphaThresh = 0.1f;
|
static float alphaThresh = 0.1f;
|
||||||
|
|
||||||
private static boolean isCompilingDisplayList = false;
|
static boolean isDepthTest = false;
|
||||||
private static DisplayList compilingDisplayList = null;
|
static int currentDepthFunc = -99999;
|
||||||
|
static boolean isCullFace = false;
|
||||||
|
static int currentCullFace = -99999;
|
||||||
|
static boolean isPolygonOffset = false;
|
||||||
|
static float polygonOffset1 = -999.9f;
|
||||||
|
static float polygonOffset2 = -999.9f;
|
||||||
|
static boolean isBlend = false;
|
||||||
|
static int blendSRC = 0;
|
||||||
|
static int blendDST = 0;
|
||||||
|
static int colorMask = 15;
|
||||||
|
static boolean isDepthMask = true;
|
||||||
|
|
||||||
private static boolean enableColorArray = false;
|
static boolean isCompilingDisplayList = false;
|
||||||
private static boolean enableNormalArray = false;
|
static DisplayList compilingDisplayList = null;
|
||||||
private static boolean enableTex0Array = false;
|
|
||||||
private static boolean enableTex1Array = false;
|
|
||||||
|
|
||||||
private static boolean enableAnisotropicFix = false;
|
static boolean enableColorArray = false;
|
||||||
private static float anisotropicFixX = 1024.0f;
|
static boolean enableNormalArray = false;
|
||||||
private static float anisotropicFixY = 1024.0f;
|
static boolean enableTex0Array = false;
|
||||||
|
static boolean enableTex1Array = false;
|
||||||
|
|
||||||
private static float colorR = 1.0f;
|
static boolean enableAnisotropicFix = false;
|
||||||
private static float colorG = 1.0f;
|
static int anisotropicFixSerial = 0;
|
||||||
private static float colorB = 1.0f;
|
static float anisotropicFixX = 1024.0f;
|
||||||
private static float colorA = 1.0f;
|
static float anisotropicFixY = 1024.0f;
|
||||||
|
|
||||||
private static float normalX = 1.0f;
|
static int colorSerial = 0;
|
||||||
private static float normalY = 0.0f;
|
static float colorR = 1.0f;
|
||||||
private static float normalZ = 0.0f;
|
static float colorG = 1.0f;
|
||||||
|
static float colorB = 1.0f;
|
||||||
|
static float colorA = 1.0f;
|
||||||
|
|
||||||
private static int selectedTex = 0;
|
static int normalSerial = 0;
|
||||||
private static int selectedClientTex = 0;
|
static float normalX = 1.0f;
|
||||||
private static float tex0X = 0;
|
static float normalY = 0.0f;
|
||||||
private static float tex0Y = 0;
|
static float normalZ = 0.0f;
|
||||||
private static float tex1X = 0;
|
|
||||||
private static float tex1Y = 0;
|
static int selectedTex = 0;
|
||||||
private static TextureGL boundTexture0 = null;
|
static int selectedClientTex = 0;
|
||||||
private static boolean enableAnisotropicPatch = false;
|
static int[] boundTex = new int[2];
|
||||||
private static boolean hintAnisotropicPatch = false;
|
static int tex0Serial = 0;
|
||||||
private static boolean swapRB = false;
|
static float tex0X = 0;
|
||||||
|
static float tex0Y = 0;
|
||||||
|
static int tex1Serial = 0;
|
||||||
|
static float tex1X = 0;
|
||||||
|
static float tex1Y = 0;
|
||||||
|
static TextureGL boundTexture0 = null;
|
||||||
|
static boolean enableAnisotropicPatch = false;
|
||||||
|
static boolean hintAnisotropicPatch = false;
|
||||||
|
static boolean swapRB = false;
|
||||||
|
|
||||||
public static final void anisotropicPatch(boolean e) {
|
public static final void anisotropicPatch(boolean e) {
|
||||||
enableAnisotropicPatch = e;
|
enableAnisotropicPatch = e;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean enableTexGen = false;
|
static boolean enableTexGen = false;
|
||||||
private static boolean enableColorMaterial = false;
|
static boolean enableColorMaterial = false;
|
||||||
|
|
||||||
private static int texS_plane = 0;
|
static int texPlaneSerial = 0;
|
||||||
private static float texS_X = 0.0f;
|
static int texSSerial = 0;
|
||||||
private static float texS_Y = 0.0f;
|
static int texS_plane = 0;
|
||||||
private static float texS_Z = 0.0f;
|
static float texS_X = 0.0f;
|
||||||
private static float texS_W = 0.0f;
|
static float texS_Y = 0.0f;
|
||||||
|
static float texS_Z = 0.0f;
|
||||||
|
static float texS_W = 0.0f;
|
||||||
|
|
||||||
private static int texT_plane = 0;
|
static int texTSerial = 0;
|
||||||
private static float texT_X = 0.0f;
|
static int texT_plane = 0;
|
||||||
private static float texT_Y = 0.0f;
|
static float texT_X = 0.0f;
|
||||||
private static float texT_Z = 0.0f;
|
static float texT_Y = 0.0f;
|
||||||
private static float texT_W = 0.0f;
|
static float texT_Z = 0.0f;
|
||||||
|
static float texT_W = 0.0f;
|
||||||
|
|
||||||
private static int texR_plane = 0;
|
static int texRSerial = 0;
|
||||||
private static float texR_X = 0.0f;
|
static int texR_plane = 0;
|
||||||
private static float texR_Y = 0.0f;
|
static float texR_X = 0.0f;
|
||||||
private static float texR_Z = 0.0f;
|
static float texR_Y = 0.0f;
|
||||||
private static float texR_W = 0.0f;
|
static float texR_Z = 0.0f;
|
||||||
|
static float texR_W = 0.0f;
|
||||||
|
|
||||||
private static int texQ_plane = 0;
|
static int texQSerial = 0;
|
||||||
private static float texQ_X = 0.0f;
|
static int texQ_plane = 0;
|
||||||
private static float texQ_Y = 0.0f;
|
static float texQ_X = 0.0f;
|
||||||
private static float texQ_Z = 0.0f;
|
static float texQ_Y = 0.0f;
|
||||||
private static float texQ_W = 0.0f;
|
static float texQ_Z = 0.0f;
|
||||||
|
static float texQ_W = 0.0f;
|
||||||
|
|
||||||
private static float fogColorR = 1.0f;
|
static int fogColorSerial = 0;
|
||||||
private static float fogColorG = 1.0f;
|
static float fogColorR = 1.0f;
|
||||||
private static float fogColorB = 1.0f;
|
static float fogColorG = 1.0f;
|
||||||
private static float fogColorA = 1.0f;
|
static float fogColorB = 1.0f;
|
||||||
private static int fogMode = 1;
|
static float fogColorA = 1.0f;
|
||||||
private static boolean fogEnabled = false;
|
static int fogCfgSerial = 0;
|
||||||
private static boolean fogPremultiply = false;
|
static int fogMode = 1;
|
||||||
private static float fogStart = 1.0f;
|
static boolean fogEnabled = false;
|
||||||
private static float fogEnd = 1.0f;
|
static float fogStart = 1.0f;
|
||||||
private static float fogDensity = 1.0f;
|
static float fogEnd = 1.0f;
|
||||||
|
static float fogDensity = 1.0f;
|
||||||
|
|
||||||
private static int bytesUploaded = 0;
|
static int bytesUploaded = 0;
|
||||||
private static int vertexDrawn = 0;
|
static int vertexDrawn = 0;
|
||||||
private static int triangleDrawn = 0;
|
static int triangleDrawn = 0;
|
||||||
|
|
||||||
private static int matrixMode = GL_MODELVIEW;
|
static int matrixMode = GL_MODELVIEW;
|
||||||
|
|
||||||
|
static int matModelSerialCounter = 0;
|
||||||
|
static int[] matModelVSerial = new int[32];
|
||||||
static Matrix4f[] matModelV = new Matrix4f[32];
|
static Matrix4f[] matModelV = new Matrix4f[32];
|
||||||
static int matModelPointer = 0;
|
static int matModelPointer = 0;
|
||||||
|
|
||||||
|
static int matProjSerialCounter = 0;
|
||||||
|
static int[] matProjVSerial = new int[6];
|
||||||
static Matrix4f[] matProjV = new Matrix4f[6];
|
static Matrix4f[] matProjV = new Matrix4f[6];
|
||||||
static int matProjPointer = 0;
|
static int matProjPointer = 0;
|
||||||
|
|
||||||
|
static int matTexSerialCounter = 0;
|
||||||
|
static int[] matTexVSerial = new int[16];
|
||||||
static Matrix4f[] matTexV = new Matrix4f[16];
|
static Matrix4f[] matTexV = new Matrix4f[16];
|
||||||
static int matTexPointer = 0;
|
static int matTexPointer = 0;
|
||||||
|
|
||||||
|
@ -280,13 +311,22 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
public static final void glEnable(int p1) {
|
public static final void glEnable(int p1) {
|
||||||
switch (p1) {
|
switch (p1) {
|
||||||
case GL_DEPTH_TEST:
|
case GL_DEPTH_TEST:
|
||||||
_wglEnable(_wGL_DEPTH_TEST);
|
if(!isDepthTest) {
|
||||||
|
_wglEnable(_wGL_DEPTH_TEST);
|
||||||
|
isDepthTest = true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case GL_CULL_FACE:
|
case GL_CULL_FACE:
|
||||||
_wglEnable(_wGL_CULL_FACE);
|
if(!isCullFace) {
|
||||||
|
_wglEnable(_wGL_CULL_FACE);
|
||||||
|
isCullFace = true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case GL_BLEND:
|
case GL_BLEND:
|
||||||
_wglEnable(_wGL_BLEND);
|
if(!isBlend) {
|
||||||
|
_wglEnable(_wGL_BLEND);
|
||||||
|
isBlend = true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case GL_RESCALE_NORMAL:
|
case GL_RESCALE_NORMAL:
|
||||||
break;
|
break;
|
||||||
|
@ -317,7 +357,10 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
enableTexGen = true;
|
enableTexGen = true;
|
||||||
break;
|
break;
|
||||||
case GL_POLYGON_OFFSET_FILL:
|
case GL_POLYGON_OFFSET_FILL:
|
||||||
_wglEnable(_wGL_POLYGON_OFFSET_FILL);
|
if(!isPolygonOffset) {
|
||||||
|
_wglEnable(_wGL_POLYGON_OFFSET_FILL);
|
||||||
|
isPolygonOffset = true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case EAG_SWAP_RB:
|
case EAG_SWAP_RB:
|
||||||
swapRB = true;
|
swapRB = true;
|
||||||
|
@ -349,7 +392,10 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
_wglDepthFunc(f);
|
if(f != currentDepthFunc) {
|
||||||
|
_wglDepthFunc(f);
|
||||||
|
currentDepthFunc = f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void glAlphaFunc(int p1, float p2) {
|
public static final void glAlphaFunc(int p1, float p2) {
|
||||||
|
@ -357,27 +403,33 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void glCullFace(int p1) {
|
public static final void glCullFace(int p1) {
|
||||||
_wglCullFace(p1);
|
if(p1 != currentCullFace) {
|
||||||
|
_wglCullFace(p1);
|
||||||
|
currentCullFace = p1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void glMatrixMode(int p1) {
|
public static final void glMatrixMode(int p1) {
|
||||||
matrixMode = p1;
|
matrixMode = p1;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Matrix4f getMatrix() {
|
private static final Matrix4f getMatrixIncrSerial() {
|
||||||
switch (matrixMode) {
|
switch (matrixMode) {
|
||||||
case GL_MODELVIEW:
|
case GL_MODELVIEW:
|
||||||
default:
|
default:
|
||||||
|
matModelVSerial[matModelPointer] = ++matModelSerialCounter;
|
||||||
return matModelV[matModelPointer];
|
return matModelV[matModelPointer];
|
||||||
case GL_PROJECTION:
|
case GL_PROJECTION:
|
||||||
|
matProjVSerial[matProjPointer] = ++matProjSerialCounter;
|
||||||
return matProjV[matProjPointer];
|
return matProjV[matProjPointer];
|
||||||
case GL_TEXTURE:
|
case GL_TEXTURE:
|
||||||
|
matTexVSerial[matTexPointer] = ++matTexSerialCounter;
|
||||||
return matTexV[matTexPointer];
|
return matTexV[matTexPointer];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void glLoadIdentity() {
|
public static final void glLoadIdentity() {
|
||||||
getMatrix().setIdentity();
|
getMatrixIncrSerial().setIdentity();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void glViewport(int p1, int p2, int p3, int p4) {
|
public static final void glViewport(int p1, int p2, int p3, int p4) {
|
||||||
|
@ -389,7 +441,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void glOrtho(float left, float right, float bottom, float top, float zNear, float zFar) {
|
public static final void glOrtho(float left, float right, float bottom, float top, float zNear, float zFar) {
|
||||||
Matrix4f res = getMatrix();
|
Matrix4f res = getMatrixIncrSerial();
|
||||||
res.m00 = 2.0f / (right - left);
|
res.m00 = 2.0f / (right - left);
|
||||||
res.m01 = 0.0f;
|
res.m01 = 0.0f;
|
||||||
res.m02 = 0.0f;
|
res.m02 = 0.0f;
|
||||||
|
@ -412,7 +464,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
|
|
||||||
public static final void glTranslatef(float p1, float p2, float p3) {
|
public static final void glTranslatef(float p1, float p2, float p3) {
|
||||||
deevis.set(p1, p2, p3);
|
deevis.set(p1, p2, p3);
|
||||||
getMatrix().translate(deevis);
|
getMatrixIncrSerial().translate(deevis);
|
||||||
if (isCompilingDisplayList) {
|
if (isCompilingDisplayList) {
|
||||||
System.err.println("matrix is not supported while recording display list use tessellator class instead");
|
System.err.println("matrix is not supported while recording display list use tessellator class instead");
|
||||||
}
|
}
|
||||||
|
@ -425,13 +477,22 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
public static final void glDisable(int p1) {
|
public static final void glDisable(int p1) {
|
||||||
switch (p1) {
|
switch (p1) {
|
||||||
case GL_DEPTH_TEST:
|
case GL_DEPTH_TEST:
|
||||||
_wglDisable(_wGL_DEPTH_TEST);
|
if(isDepthTest) {
|
||||||
|
_wglDisable(_wGL_DEPTH_TEST);
|
||||||
|
isDepthTest = false;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case GL_CULL_FACE:
|
case GL_CULL_FACE:
|
||||||
_wglDisable(_wGL_CULL_FACE);
|
if(isCullFace) {
|
||||||
|
_wglDisable(_wGL_CULL_FACE);
|
||||||
|
isCullFace = false;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case GL_BLEND:
|
case GL_BLEND:
|
||||||
_wglDisable(_wGL_BLEND);
|
if(isBlend) {
|
||||||
|
_wglDisable(_wGL_BLEND);
|
||||||
|
isBlend = false;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case GL_RESCALE_NORMAL:
|
case GL_RESCALE_NORMAL:
|
||||||
break;
|
break;
|
||||||
|
@ -462,7 +523,10 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
enableTexGen = false;
|
enableTexGen = false;
|
||||||
break;
|
break;
|
||||||
case GL_POLYGON_OFFSET_FILL:
|
case GL_POLYGON_OFFSET_FILL:
|
||||||
_wglDisable(_wGL_POLYGON_OFFSET_FILL);
|
if(isPolygonOffset) {
|
||||||
|
_wglDisable(_wGL_POLYGON_OFFSET_FILL);
|
||||||
|
isPolygonOffset = false;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case EAG_SWAP_RB:
|
case EAG_SWAP_RB:
|
||||||
swapRB = false;
|
swapRB = false;
|
||||||
|
@ -473,6 +537,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void glColor4f(float p1, float p2, float p3, float p4) {
|
public static final void glColor4f(float p1, float p2, float p3, float p4) {
|
||||||
|
++colorSerial;
|
||||||
colorR = p1;
|
colorR = p1;
|
||||||
colorG = p2;
|
colorG = p2;
|
||||||
colorB = p3;
|
colorB = p3;
|
||||||
|
@ -511,12 +576,16 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int lightPos0Serial = 0;
|
||||||
|
static int lightPos1Serial = 0;
|
||||||
private static Vector4f lightPos0vec0 = new Vector4f();
|
private static Vector4f lightPos0vec0 = new Vector4f();
|
||||||
private static Vector4f lightPos1vec0 = new Vector4f();
|
private static Vector4f lightPos1vec0 = new Vector4f();
|
||||||
private static Vector4f lightPos0vec = new Vector4f();
|
static Vector4f lightPos0vec = new Vector4f();
|
||||||
private static Vector4f lightPos1vec = new Vector4f();
|
static Vector4f lightPos1vec = new Vector4f();
|
||||||
|
|
||||||
public static final void copyModelToLightMatrix() {
|
public static final void copyModelToLightMatrix() {
|
||||||
|
++lightPos0Serial;
|
||||||
|
++lightPos1Serial;
|
||||||
lightPos0vec0.set(lightPos0vec);
|
lightPos0vec0.set(lightPos0vec);
|
||||||
lightPos1vec0.set(lightPos1vec);
|
lightPos1vec0.set(lightPos1vec);
|
||||||
lightPos0vec.set(0.2f, 1.0f, -0.7f, 0.0f);
|
lightPos0vec.set(0.2f, 1.0f, -0.7f, 0.0f);
|
||||||
|
@ -528,6 +597,8 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void flipLightMatrix() {
|
public static final void flipLightMatrix() {
|
||||||
|
++lightPos0Serial;
|
||||||
|
++lightPos1Serial;
|
||||||
lightPos0vec.x = -lightPos0vec.x;
|
lightPos0vec.x = -lightPos0vec.x;
|
||||||
lightPos1vec.x = -lightPos1vec.x;
|
lightPos1vec.x = -lightPos1vec.x;
|
||||||
lightPos0vec.y = -lightPos0vec.y;
|
lightPos0vec.y = -lightPos0vec.y;
|
||||||
|
@ -537,6 +608,8 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void revertLightMatrix() {
|
public static final void revertLightMatrix() {
|
||||||
|
++lightPos0Serial;
|
||||||
|
++lightPos1Serial;
|
||||||
lightPos0vec.set(lightPos0vec0);
|
lightPos0vec.set(lightPos0vec0);
|
||||||
lightPos1vec.set(lightPos1vec0);
|
lightPos1vec.set(lightPos1vec0);
|
||||||
}
|
}
|
||||||
|
@ -548,6 +621,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
if (matModelPointer < matModelV.length - 1) {
|
if (matModelPointer < matModelV.length - 1) {
|
||||||
++matModelPointer;
|
++matModelPointer;
|
||||||
matModelV[matModelPointer].load(matModelV[matModelPointer - 1]);
|
matModelV[matModelPointer].load(matModelV[matModelPointer - 1]);
|
||||||
|
matModelVSerial[matModelPointer] = matModelVSerial[matModelPointer - 1];
|
||||||
} else {
|
} else {
|
||||||
System.err.println("modelview matrix stack overflow");
|
System.err.println("modelview matrix stack overflow");
|
||||||
}
|
}
|
||||||
|
@ -556,6 +630,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
if (matProjPointer < matProjV.length - 1) {
|
if (matProjPointer < matProjV.length - 1) {
|
||||||
++matProjPointer;
|
++matProjPointer;
|
||||||
matProjV[matProjPointer].load(matProjV[matProjPointer - 1]);
|
matProjV[matProjPointer].load(matProjV[matProjPointer - 1]);
|
||||||
|
matProjVSerial[matProjPointer] = matProjVSerial[matProjPointer - 1];
|
||||||
} else {
|
} else {
|
||||||
System.err.println("projection matrix stack overflow");
|
System.err.println("projection matrix stack overflow");
|
||||||
}
|
}
|
||||||
|
@ -564,6 +639,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
if (matTexPointer < matTexV.length - 1) {
|
if (matTexPointer < matTexV.length - 1) {
|
||||||
++matTexPointer;
|
++matTexPointer;
|
||||||
matTexV[matTexPointer].load(matTexV[matTexPointer - 1]);
|
matTexV[matTexPointer].load(matTexV[matTexPointer - 1]);
|
||||||
|
matTexVSerial[matTexPointer] = matTexVSerial[matTexPointer - 1];
|
||||||
} else {
|
} else {
|
||||||
System.err.println("texture matrix stack overflow");
|
System.err.println("texture matrix stack overflow");
|
||||||
}
|
}
|
||||||
|
@ -575,7 +651,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
|
|
||||||
public static final void glRotatef(float p1, float p2, float p3, float p4) {
|
public static final void glRotatef(float p1, float p2, float p3, float p4) {
|
||||||
deevis.set(p2, p3, p4);
|
deevis.set(p2, p3, p4);
|
||||||
getMatrix().rotate(p1 * toRad, deevis);
|
getMatrixIncrSerial().rotate(p1 * toRad, deevis);
|
||||||
if (isCompilingDisplayList) {
|
if (isCompilingDisplayList) {
|
||||||
System.err.println("matrix is not supported while recording display list use tessellator class instead");
|
System.err.println("matrix is not supported while recording display list use tessellator class instead");
|
||||||
}
|
}
|
||||||
|
@ -632,7 +708,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
|
|
||||||
public static final void glScalef(float p1, float p2, float p3) {
|
public static final void glScalef(float p1, float p2, float p3) {
|
||||||
deevis.set(p1, p2, p3);
|
deevis.set(p1, p2, p3);
|
||||||
getMatrix().scale(deevis);
|
getMatrixIncrSerial().scale(deevis);
|
||||||
if (isCompilingDisplayList) {
|
if (isCompilingDisplayList) {
|
||||||
System.err.println("matrix is not supported while recording display list use tessellator class instead");
|
System.err.println("matrix is not supported while recording display list use tessellator class instead");
|
||||||
}
|
}
|
||||||
|
@ -641,15 +717,24 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
private static final Matrix4f tmpMat = new Matrix4f();
|
private static final Matrix4f tmpMat = new Matrix4f();
|
||||||
|
|
||||||
public static final void glMultMatrixf(Matrix4f mat) {
|
public static final void glMultMatrixf(Matrix4f mat) {
|
||||||
getMatrix().load(Matrix4f.mul(getMatrix(), mat, tmpMat));
|
getMatrixIncrSerial().load(Matrix4f.mul(getMatrixIncrSerial(), mat, tmpMat));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void glBlendFunc(int p1, int p2) {
|
public static final void glBlendFunc(int p1, int p2) {
|
||||||
fogPremultiply = (p1 == GL_ONE && p2 == GL_ONE_MINUS_SRC_ALPHA);
|
|
||||||
if(overlayFBOBlending) {
|
if(overlayFBOBlending) {
|
||||||
_wglBlendFuncSeparate(p1, p2, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
int i = p1 | 0x10000;
|
||||||
|
int j = p2 | 0x10000;
|
||||||
|
if(blendSRC != i || blendDST != j) {
|
||||||
|
_wglBlendFuncSeparate(p1, p2, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
blendSRC = i;
|
||||||
|
blendDST = j;
|
||||||
|
}
|
||||||
}else {
|
}else {
|
||||||
_wglBlendFunc(p1, p2);
|
if(blendSRC != p1 || blendDST != p2) {
|
||||||
|
_wglBlendFunc(p1, p2);
|
||||||
|
blendSRC = p1;
|
||||||
|
blendDST = p2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -660,11 +745,18 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void glDepthMask(boolean p1) {
|
public static final void glDepthMask(boolean p1) {
|
||||||
_wglDepthMask(p1);
|
if(isDepthMask != p1) {
|
||||||
|
_wglDepthMask(p1);
|
||||||
|
isDepthMask = p1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void glColorMask(boolean p1, boolean p2, boolean p3, boolean p4) {
|
public static final void glColorMask(boolean p1, boolean p2, boolean p3, boolean p4) {
|
||||||
_wglColorMask(p1, p2, p3, p4);
|
int hsh = (p1 ? 1 : 0) | (p2 ? 2 : 0) | (p3 ? 4 : 0) | (p4 ? 8 : 0);
|
||||||
|
if(colorMask != hsh) {
|
||||||
|
_wglColorMask(p1, p2, p3, p4);
|
||||||
|
colorMask = hsh;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final void updateAnisotropicPatch() {
|
private static final void updateAnisotropicPatch() {
|
||||||
|
@ -672,6 +764,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
enableAnisotropicFix = false;
|
enableAnisotropicFix = false;
|
||||||
if (enableAnisotropicPatch && boundTexture0 != null && boundTexture0.anisotropic && boundTexture0.nearest) {
|
if (enableAnisotropicPatch && boundTexture0 != null && boundTexture0.anisotropic && boundTexture0.nearest) {
|
||||||
enableAnisotropicFix = true;
|
enableAnisotropicFix = true;
|
||||||
|
++anisotropicFixSerial;
|
||||||
anisotropicFixX = boundTexture0.w;
|
anisotropicFixX = boundTexture0.w;
|
||||||
anisotropicFixY = boundTexture0.h;
|
anisotropicFixY = boundTexture0.h;
|
||||||
}
|
}
|
||||||
|
@ -679,11 +772,14 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void glBindTexture(int p1, int p2) {
|
public static final void glBindTexture(int p1, int p2) {
|
||||||
TextureGL t = texObjects.get(p2);
|
if(boundTex[selectedTex] != p2) {
|
||||||
_wglBindTexture(_wGL_TEXTURE_2D, t);
|
TextureGL t = texObjects.get(p2);
|
||||||
if (selectedTex == 0) {
|
_wglBindTexture(_wGL_TEXTURE_2D, t);
|
||||||
boundTexture0 = t;
|
if (selectedTex == 0) {
|
||||||
updateAnisotropicPatch();
|
boundTexture0 = t;
|
||||||
|
updateAnisotropicPatch();
|
||||||
|
}
|
||||||
|
boundTex[selectedTex] = p2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -715,6 +811,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void glNormal3f(float p1, float p2, float p3) {
|
public static final void glNormal3f(float p1, float p2, float p3) {
|
||||||
|
++normalSerial;
|
||||||
float len = (float) Math.sqrt(p1 * p1 + p2 * p2 + p3 * p3);
|
float len = (float) Math.sqrt(p1 * p1 + p2 * p2 + p3 * p3);
|
||||||
normalX = p1 / len;
|
normalX = p1 / len;
|
||||||
normalY = p2 / len;
|
normalY = p2 / len;
|
||||||
|
@ -731,8 +828,10 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void _wglBindVertexArray0(BufferArrayGL p1) {
|
public static final void _wglBindVertexArray0(BufferArrayGL p1) {
|
||||||
currentArray = p1;
|
if(currentArray != p1) {
|
||||||
_wglBindVertexArray(p1);
|
currentArray = p1;
|
||||||
|
_wglBindVertexArray(p1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int displayListId = 0;
|
private static int displayListId = 0;
|
||||||
|
@ -798,7 +897,9 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
|
|
||||||
public static final HighPolyMesh loadMesh(String path) {
|
public static final HighPolyMesh loadMesh(String path) {
|
||||||
try {
|
try {
|
||||||
return HighPolyMesh.loadMeshData(EaglerAdapter.loadResourceBytes(path));
|
HighPolyMesh ret = HighPolyMesh.loadMeshData(EaglerAdapter.loadResourceBytes(path));
|
||||||
|
currentArray = ret.vertexArray;
|
||||||
|
return ret;
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
System.err.println("Could not load HighPolyMesh! " + ex.toString());
|
System.err.println("Could not load HighPolyMesh! " + ex.toString());
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
|
@ -807,6 +908,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void glColor3f(float p1, float p2, float p3) {
|
public static final void glColor3f(float p1, float p2, float p3) {
|
||||||
|
++colorSerial;
|
||||||
colorR = p1;
|
colorR = p1;
|
||||||
colorG = p2;
|
colorG = p2;
|
||||||
colorB = p3;
|
colorB = p3;
|
||||||
|
@ -828,6 +930,8 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
}
|
}
|
||||||
switch (p1) {
|
switch (p1) {
|
||||||
case GL_S:
|
case GL_S:
|
||||||
|
++texPlaneSerial;
|
||||||
|
++texSSerial;
|
||||||
texS_plane = (p2 == GL_EYE_PLANE ? 1 : 0);
|
texS_plane = (p2 == GL_EYE_PLANE ? 1 : 0);
|
||||||
texS_X = vec.x;
|
texS_X = vec.x;
|
||||||
texS_Y = vec.y;
|
texS_Y = vec.y;
|
||||||
|
@ -835,6 +939,8 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
texS_W = vec.w;
|
texS_W = vec.w;
|
||||||
break;
|
break;
|
||||||
case GL_T:
|
case GL_T:
|
||||||
|
++texPlaneSerial;
|
||||||
|
++texTSerial;
|
||||||
texT_plane = (p2 == GL_EYE_PLANE ? 1 : 0);
|
texT_plane = (p2 == GL_EYE_PLANE ? 1 : 0);
|
||||||
texT_X = vec.x;
|
texT_X = vec.x;
|
||||||
texT_Y = vec.y;
|
texT_Y = vec.y;
|
||||||
|
@ -842,6 +948,8 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
texT_W = vec.w;
|
texT_W = vec.w;
|
||||||
break;
|
break;
|
||||||
case GL_R:
|
case GL_R:
|
||||||
|
++texPlaneSerial;
|
||||||
|
++texRSerial;
|
||||||
texR_plane = (p2 == GL_EYE_PLANE ? 1 : 0);
|
texR_plane = (p2 == GL_EYE_PLANE ? 1 : 0);
|
||||||
texR_X = vec.x;
|
texR_X = vec.x;
|
||||||
texR_Y = vec.y;
|
texR_Y = vec.y;
|
||||||
|
@ -849,6 +957,8 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
texR_W = vec.w;
|
texR_W = vec.w;
|
||||||
break;
|
break;
|
||||||
case GL_Q:
|
case GL_Q:
|
||||||
|
++texPlaneSerial;
|
||||||
|
++texQSerial;
|
||||||
texQ_plane = (p2 == GL_EYE_PLANE ? 1 : 0);
|
texQ_plane = (p2 == GL_EYE_PLANE ? 1 : 0);
|
||||||
texQ_X = vec.x;
|
texQ_X = vec.x;
|
||||||
texQ_Y = vec.y;
|
texQ_Y = vec.y;
|
||||||
|
@ -908,7 +1018,11 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void glPolygonOffset(float p1, float p2) {
|
public static final void glPolygonOffset(float p1, float p2) {
|
||||||
_wglPolygonOffset(p1, p2);
|
if(p1 != polygonOffset1 || p2 != polygonOffset2) {
|
||||||
|
_wglPolygonOffset(p1, p2);
|
||||||
|
polygonOffset1 = p1;
|
||||||
|
polygonOffset2 = p2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void glCallLists(IntBuffer p1) {
|
public static final void glCallLists(IntBuffer p1) {
|
||||||
|
@ -1023,40 +1137,13 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
private static final void bindTheShader(int mode) {
|
private static final void bindTheShader(int mode) {
|
||||||
FixedFunctionShader s = shader = FixedFunctionShader.instance(mode);
|
FixedFunctionShader s = shader = FixedFunctionShader.instance(mode);
|
||||||
s.useProgram();
|
s.useProgram();
|
||||||
if (enableAlphaTest) {
|
s.update();
|
||||||
s.setAlphaTest(alphaThresh);
|
|
||||||
}
|
|
||||||
s.setColor(colorR, colorG, colorB, colorA);
|
|
||||||
if (fogEnabled) {
|
|
||||||
s.setFogMode((fogPremultiply ? 2 : 0) + fogMode);
|
|
||||||
s.setFogColor(fogColorR, fogColorG, fogColorB, fogColorA);
|
|
||||||
s.setFogDensity(fogDensity);
|
|
||||||
s.setFogStartEnd(fogStart, fogEnd);
|
|
||||||
}
|
|
||||||
s.setModelMatrix(matModelV[matModelPointer]);
|
|
||||||
s.setProjectionMatrix(matProjV[matProjPointer]);
|
|
||||||
s.setTextureMatrix(matTexV[matTexPointer]);
|
|
||||||
if (enableColorMaterial && enableLighting) {
|
|
||||||
s.setNormal(normalX, normalY, normalZ);
|
|
||||||
s.setLightPositions(lightPos0vec, lightPos1vec);
|
|
||||||
}
|
|
||||||
s.setTex0Coords(tex0X, tex0Y);
|
|
||||||
s.setTex1Coords(tex1X, tex1Y);
|
|
||||||
if (enableTexGen) {
|
|
||||||
s.setTexGenS(texS_plane, texS_X, texS_Y, texS_Z, texS_W);
|
|
||||||
s.setTexGenT(texT_plane, texT_X, texT_Y, texT_Z, texT_W);
|
|
||||||
s.setTexGenR(texR_plane, texR_X, texR_Y, texR_Z, texR_W);
|
|
||||||
s.setTexGenQ(texQ_plane, texQ_X, texQ_Y, texQ_Z, texQ_W);
|
|
||||||
}
|
|
||||||
if (enableAnisotropicFix) {
|
|
||||||
s.setAnisotropicFix(anisotropicFixX, anisotropicFixY);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void drawHighPoly(HighPolyMesh msh) {
|
public static final void drawHighPoly(HighPolyMesh msh) {
|
||||||
bindTheShader((msh.hasTexture ? (FixedFunctionShader.NORMAL | FixedFunctionShader.TEXTURE0)
|
bindTheShader((msh.hasTexture ? (FixedFunctionShader.NORMAL | FixedFunctionShader.TEXTURE0)
|
||||||
: FixedFunctionShader.NORMAL) | getShaderModeFlag1());
|
: FixedFunctionShader.NORMAL) | getShaderModeFlag1());
|
||||||
_wglBindVertexArray(msh.vertexArray);
|
_wglBindVertexArray0(msh.vertexArray);
|
||||||
_wglDrawElements(_wGL_TRIANGLES, msh.indexCount, _wGL_UNSIGNED_SHORT, 0);
|
_wglDrawElements(_wGL_TRIANGLES, msh.indexCount, _wGL_UNSIGNED_SHORT, 0);
|
||||||
triangleDrawn += msh.indexCount / 3;
|
triangleDrawn += msh.indexCount / 3;
|
||||||
shader.unuseProgram();
|
shader.unuseProgram();
|
||||||
|
@ -1237,7 +1324,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
if (occlusion_vao == null)
|
if (occlusion_vao == null)
|
||||||
initializeOcclusionObjects();
|
initializeOcclusionObjects();
|
||||||
_wglUseProgram(occlusion_program);
|
_wglUseProgram(occlusion_program);
|
||||||
_wglBindVertexArray(occlusion_vao);
|
_wglBindVertexArray0(occlusion_vao);
|
||||||
if (!cachedOcclusionP.equals(matProjV[matProjPointer])) {
|
if (!cachedOcclusionP.equals(matProjV[matProjPointer])) {
|
||||||
cachedOcclusionP.load(matProjV[matProjPointer]);
|
cachedOcclusionP.load(matProjV[matProjPointer]);
|
||||||
cachedOcclusionP.store(occlusionProj);
|
cachedOcclusionP.store(occlusionProj);
|
||||||
|
@ -1302,9 +1389,11 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
switch (p2) {
|
switch (p2) {
|
||||||
default:
|
default:
|
||||||
case GL_LINEAR:
|
case GL_LINEAR:
|
||||||
|
++fogCfgSerial;
|
||||||
fogMode = 1;
|
fogMode = 1;
|
||||||
break;
|
break;
|
||||||
case GL_EXP:
|
case GL_EXP:
|
||||||
|
++fogCfgSerial;
|
||||||
fogMode = 2;
|
fogMode = 2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1314,12 +1403,15 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
public static final void glFogf(int p1, float p2) {
|
public static final void glFogf(int p1, float p2) {
|
||||||
switch (p1) {
|
switch (p1) {
|
||||||
case GL_FOG_START:
|
case GL_FOG_START:
|
||||||
|
++fogCfgSerial;
|
||||||
fogStart = p2;
|
fogStart = p2;
|
||||||
break;
|
break;
|
||||||
case GL_FOG_END:
|
case GL_FOG_END:
|
||||||
|
++fogCfgSerial;
|
||||||
fogEnd = p2;
|
fogEnd = p2;
|
||||||
break;
|
break;
|
||||||
case GL_FOG_DENSITY:
|
case GL_FOG_DENSITY:
|
||||||
|
++fogCfgSerial;
|
||||||
fogDensity = p2;
|
fogDensity = p2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -1329,6 +1421,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
|
|
||||||
public static final void glFog(int p1, FloatBuffer p2) {
|
public static final void glFog(int p1, FloatBuffer p2) {
|
||||||
if (p1 == GL_FOG_COLOR) {
|
if (p1 == GL_FOG_COLOR) {
|
||||||
|
++fogColorSerial;
|
||||||
fogColorR = p2.get();
|
fogColorR = p2.get();
|
||||||
fogColorG = p2.get();
|
fogColorG = p2.get();
|
||||||
fogColorB = p2.get();
|
fogColorB = p2.get();
|
||||||
|
@ -1380,10 +1473,12 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
public static final void glMultiTexCoord2f(int p1, float p2, float p3) {
|
public static final void glMultiTexCoord2f(int p1, float p2, float p3) {
|
||||||
switch (p1) {
|
switch (p1) {
|
||||||
case GL_TEXTURE0:
|
case GL_TEXTURE0:
|
||||||
|
++tex0Serial;
|
||||||
tex0X = p2;
|
tex0X = p2;
|
||||||
tex0Y = p3;
|
tex0Y = p3;
|
||||||
break;
|
break;
|
||||||
case GL_TEXTURE1:
|
case GL_TEXTURE1:
|
||||||
|
++tex1Serial;
|
||||||
tex1X = p2;
|
tex1X = p2;
|
||||||
tex1Y = p3;
|
tex1Y = p3;
|
||||||
break;
|
break;
|
||||||
|
@ -1412,7 +1507,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void gluPerspective(float fovy, float aspect, float zNear, float zFar) {
|
public static final void gluPerspective(float fovy, float aspect, float zNear, float zFar) {
|
||||||
Matrix4f res = getMatrix();
|
Matrix4f res = getMatrixIncrSerial();
|
||||||
float cotangent = (float) Math.cos(fovy * toRad * 0.5f) / (float) Math.sin(fovy * toRad * 0.5f);
|
float cotangent = (float) Math.cos(fovy * toRad * 0.5f) / (float) Math.sin(fovy * toRad * 0.5f);
|
||||||
res.m00 = cotangent / aspect;
|
res.m00 = cotangent / aspect;
|
||||||
res.m01 = 0.0f;
|
res.m01 = 0.0f;
|
||||||
|
@ -1433,7 +1528,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final void gluPerspectiveFlat(float fovy, float aspect, float zNear, float zFar) {
|
public static final void gluPerspectiveFlat(float fovy, float aspect, float zNear, float zFar) {
|
||||||
Matrix4f res = getMatrix();
|
Matrix4f res = getMatrixIncrSerial();
|
||||||
float cotangent = (float) Math.cos(fovy * toRad * 0.5f) / (float) Math.sin(fovy * toRad * 0.5f);
|
float cotangent = (float) Math.cos(fovy * toRad * 0.5f) / (float) Math.sin(fovy * toRad * 0.5f);
|
||||||
res.m00 = cotangent / aspect;
|
res.m00 = cotangent / aspect;
|
||||||
res.m01 = 0.0f;
|
res.m01 = 0.0f;
|
||||||
|
|
|
@ -121,21 +121,22 @@ public class FixedFunctionShader {
|
||||||
private UniformGL u_matrix_t = null;
|
private UniformGL u_matrix_t = null;
|
||||||
|
|
||||||
private UniformGL u_fogColor = null;
|
private UniformGL u_fogColor = null;
|
||||||
private UniformGL u_fogMode = null;
|
//private UniformGL u_fogMode = null;
|
||||||
private UniformGL u_fogStart = null;
|
//private UniformGL u_fogStart = null;
|
||||||
private UniformGL u_fogEnd = null;
|
//private UniformGL u_fogEnd = null;
|
||||||
private UniformGL u_fogDensity = null;
|
//private UniformGL u_fogDensity = null;
|
||||||
private UniformGL u_fogPremultiply = null;
|
private UniformGL u_fogParam = null;
|
||||||
|
|
||||||
private UniformGL u_colorUniform = null;
|
private UniformGL u_colorUniform = null;
|
||||||
private UniformGL u_normalUniform = null;
|
private UniformGL u_normalUniform = null;
|
||||||
|
|
||||||
private UniformGL u_alphaTestF = null;
|
private UniformGL u_alphaTestF = null;
|
||||||
|
|
||||||
private UniformGL u_textureGenS_M = null;
|
//private UniformGL u_textureGenS_M = null;
|
||||||
private UniformGL u_textureGenT_M = null;
|
//private UniformGL u_textureGenT_M = null;
|
||||||
private UniformGL u_textureGenR_M = null;
|
//private UniformGL u_textureGenR_M = null;
|
||||||
private UniformGL u_textureGenQ_M = null;
|
//private UniformGL u_textureGenQ_M = null;
|
||||||
|
private UniformGL u_textureGen_M = null;
|
||||||
private UniformGL u_textureGenS_V = null;
|
private UniformGL u_textureGenS_V = null;
|
||||||
private UniformGL u_textureGenT_V = null;
|
private UniformGL u_textureGenT_V = null;
|
||||||
private UniformGL u_textureGenR_V = null;
|
private UniformGL u_textureGenR_V = null;
|
||||||
|
@ -277,11 +278,11 @@ public class FixedFunctionShader {
|
||||||
|
|
||||||
if(enable_fog) {
|
if(enable_fog) {
|
||||||
u_fogColor = _wglGetUniformLocation(globject, "fogColor");
|
u_fogColor = _wglGetUniformLocation(globject, "fogColor");
|
||||||
u_fogMode = _wglGetUniformLocation(globject, "fogMode");
|
//u_fogMode = _wglGetUniformLocation(globject, "fogMode");
|
||||||
u_fogStart = _wglGetUniformLocation(globject, "fogStart");
|
//u_fogStart = _wglGetUniformLocation(globject, "fogStart");
|
||||||
u_fogEnd = _wglGetUniformLocation(globject, "fogEnd");
|
//u_fogEnd = _wglGetUniformLocation(globject, "fogEnd");
|
||||||
u_fogDensity = _wglGetUniformLocation(globject, "fogDensity");
|
//u_fogDensity = _wglGetUniformLocation(globject, "fogDensity");
|
||||||
u_fogPremultiply = _wglGetUniformLocation(globject, "fogPremultiply");
|
u_fogParam = _wglGetUniformLocation(globject, "fogParam");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(enable_alphatest) {
|
if(enable_alphatest) {
|
||||||
|
@ -289,10 +290,11 @@ public class FixedFunctionShader {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(enable_TEX_GEN_STRQ) {
|
if(enable_TEX_GEN_STRQ) {
|
||||||
u_textureGenS_M = _wglGetUniformLocation(globject, "textureGenS_M");
|
//u_textureGenS_M = _wglGetUniformLocation(globject, "textureGenS_M");
|
||||||
u_textureGenT_M = _wglGetUniformLocation(globject, "textureGenT_M");
|
//u_textureGenT_M = _wglGetUniformLocation(globject, "textureGenT_M");
|
||||||
u_textureGenR_M = _wglGetUniformLocation(globject, "textureGenR_M");
|
//u_textureGenR_M = _wglGetUniformLocation(globject, "textureGenR_M");
|
||||||
u_textureGenQ_M = _wglGetUniformLocation(globject, "textureGenQ_M");
|
//u_textureGenQ_M = _wglGetUniformLocation(globject, "textureGenQ_M");
|
||||||
|
u_textureGen_M = _wglGetUniformLocation(globject, "textureGen_M");
|
||||||
u_textureGenS_V = _wglGetUniformLocation(globject, "textureGenS_V");
|
u_textureGenS_V = _wglGetUniformLocation(globject, "textureGenS_V");
|
||||||
u_textureGenT_V = _wglGetUniformLocation(globject, "textureGenT_V");
|
u_textureGenT_V = _wglGetUniformLocation(globject, "textureGenT_V");
|
||||||
u_textureGenR_V = _wglGetUniformLocation(globject, "textureGenR_V");
|
u_textureGenR_V = _wglGetUniformLocation(globject, "textureGenR_V");
|
||||||
|
@ -354,165 +356,281 @@ public class FixedFunctionShader {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private float[] modelBuffer = new float[16];
|
private float[] matBuffer = new float[16];
|
||||||
private float[] projectionBuffer = new float[16];
|
|
||||||
private float[] textureBuffer = new float[16];
|
|
||||||
|
|
||||||
private Matrix4f modelMatrix = (Matrix4f) new Matrix4f().setZero();
|
|
||||||
private Matrix4f projectionMatrix = (Matrix4f) new Matrix4f().setZero();
|
|
||||||
private Matrix4f textureMatrix = (Matrix4f) new Matrix4f().setZero();
|
|
||||||
private Vector4f light0Pos = new Vector4f();
|
private Vector4f light0Pos = new Vector4f();
|
||||||
private Vector4f light1Pos = new Vector4f();
|
private Vector4f light1Pos = new Vector4f();
|
||||||
private Vector2f anisotropicFix = new Vector2f(0.0f, 0.0f);
|
private Vector2f anisotropicFix = new Vector2f(0.0f, 0.0f);
|
||||||
|
|
||||||
public void setAnisotropicFix(float x, float y) {
|
|
||||||
if(anisotropicFix.x != x || anisotropicFix.y != y) {
|
|
||||||
anisotropicFix.x = x;
|
|
||||||
anisotropicFix.y = y;
|
|
||||||
_wglUniform2f(u_anisotropic_fix, x, y);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setModelMatrix(Matrix4f mat) {
|
|
||||||
if(!mat.equals(modelMatrix)) {
|
|
||||||
modelMatrix.load(mat).store(modelBuffer);
|
|
||||||
_wglUniformMat4fv(u_matrix_m, modelBuffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public void setProjectionMatrix(Matrix4f mat) {
|
|
||||||
if(!mat.equals(projectionMatrix)) {
|
|
||||||
projectionMatrix.load(mat).store(projectionBuffer);
|
|
||||||
_wglUniformMat4fv(u_matrix_p, projectionBuffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public void setTextureMatrix(Matrix4f mat) {
|
|
||||||
if(!mat.equals(textureMatrix)) {
|
|
||||||
textureMatrix.load(mat).store(textureBuffer);
|
|
||||||
_wglUniformMat4fv(u_matrix_t, textureBuffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public void setLightPositions(Vector4f pos0, Vector4f pos1) {
|
|
||||||
if(!pos0.equals(light0Pos) || !pos1.equals(light1Pos)) {
|
|
||||||
light0Pos.set(pos0);
|
|
||||||
light1Pos.set(pos1);
|
|
||||||
_wglUniform3f(u_light0Pos, light0Pos.x, light0Pos.y, light0Pos.z);
|
|
||||||
_wglUniform3f(u_light1Pos, light1Pos.x, light1Pos.y, light1Pos.z);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private int fogMode = 0;
|
private int fogMode = 0;
|
||||||
public void setFogMode(int mode) {
|
|
||||||
if(fogMode != mode) {
|
|
||||||
fogMode = mode;
|
|
||||||
_wglUniform1i(u_fogMode, mode % 2);
|
|
||||||
_wglUniform1f(u_fogPremultiply, mode / 2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private float fogColorR = 0.0f;
|
private float fogColorR = 0.0f;
|
||||||
private float fogColorG = 0.0f;
|
private float fogColorG = 0.0f;
|
||||||
private float fogColorB = 0.0f;
|
private float fogColorB = 0.0f;
|
||||||
private float fogColorA = 0.0f;
|
private float fogColorA = 0.0f;
|
||||||
public void setFogColor(float r, float g, float b, float a) {
|
|
||||||
if(fogColorR != r || fogColorG != g || fogColorB != b || fogColorA != a) {
|
|
||||||
fogColorR = r;
|
|
||||||
fogColorG = g;
|
|
||||||
fogColorB = b;
|
|
||||||
fogColorA = a;
|
|
||||||
_wglUniform4f(u_fogColor, fogColorR, fogColorG, fogColorB, fogColorA);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private float fogStart = 0.0f;
|
private float fogStart = 0.0f;
|
||||||
private float fogEnd = 0.0f;
|
private float fogEnd = 0.0f;
|
||||||
public void setFogStartEnd(float s, float e) {
|
|
||||||
if(fogStart != s || fogEnd != e) {
|
|
||||||
fogStart = s;
|
|
||||||
fogEnd = e;
|
|
||||||
_wglUniform1f(u_fogStart, fogStart);
|
|
||||||
_wglUniform1f(u_fogEnd, fogEnd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private float fogDensity = 0.0f;
|
private float fogDensity = 0.0f;
|
||||||
public void setFogDensity(float d) {
|
|
||||||
if(fogDensity != d) {
|
|
||||||
fogDensity = d;
|
|
||||||
_wglUniform1f(u_fogDensity, fogDensity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private float alphaTestValue = 0.0f;
|
private float alphaTestValue = 0.0f;
|
||||||
public void setAlphaTest(float limit) {
|
|
||||||
if(alphaTestValue != limit) {
|
|
||||||
alphaTestValue = limit;
|
|
||||||
_wglUniform1f(u_alphaTestF, alphaTestValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private float tex0x = 0.0f;
|
private float tex0x = 0.0f;
|
||||||
private float tex0y = 0.0f;
|
private float tex0y = 0.0f;
|
||||||
public void setTex0Coords(float x, float y) {
|
|
||||||
if(tex0x != x || tex0y != y) {
|
|
||||||
tex0x = x;
|
|
||||||
tex0y = y;
|
|
||||||
_wglUniform2f(u_texCoordV0, tex0x, tex0y);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private float tex1x = 0.0f;
|
private float tex1x = 0.0f;
|
||||||
private float tex1y = 0.0f;
|
private float tex1y = 0.0f;
|
||||||
public void setTex1Coords(float x, float y) {
|
|
||||||
if(tex1x != x || tex1y != y) {
|
|
||||||
tex1x = x;
|
|
||||||
tex1y = y;
|
|
||||||
_wglUniform2f(u_texCoordV1, tex1x, tex1y);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTexGenS(int plane, float x, float y, float z, float w) {
|
|
||||||
_wglUniform1i(u_textureGenS_M, plane);
|
|
||||||
_wglUniform4f(u_textureGenS_V, x, y, z, w);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTexGenT(int plane, float x, float y, float z, float w) {
|
|
||||||
_wglUniform1i(u_textureGenT_M, plane);
|
|
||||||
_wglUniform4f(u_textureGenT_V, x, y, z, w);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTexGenR(int plane, float x, float y, float z, float w) {
|
|
||||||
_wglUniform1i(u_textureGenR_M, plane);
|
|
||||||
_wglUniform4f(u_textureGenR_V, x, y, z, w);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTexGenQ(int plane, float x, float y, float z, float w) {
|
|
||||||
_wglUniform1i(u_textureGenQ_M, plane);
|
|
||||||
_wglUniform4f(u_textureGenQ_V, x, y, z, w);
|
|
||||||
}
|
|
||||||
|
|
||||||
private float colorUniformR = 0.0f;
|
private float colorUniformR = 0.0f;
|
||||||
private float colorUniformG = 0.0f;
|
private float colorUniformG = 0.0f;
|
||||||
private float colorUniformB = 0.0f;
|
private float colorUniformB = 0.0f;
|
||||||
private float colorUniformA = 0.0f;
|
private float colorUniformA = 0.0f;
|
||||||
public void setColor(float r, float g, float b, float a) {
|
|
||||||
if(colorUniformR != r || colorUniformG != g || colorUniformB != b || colorUniformA != a) {
|
|
||||||
colorUniformR = r;
|
|
||||||
colorUniformG = g;
|
|
||||||
colorUniformB = b;
|
|
||||||
colorUniformA = a;
|
|
||||||
_wglUniform4f(u_colorUniform, colorUniformR, colorUniformG, colorUniformB, colorUniformA);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private float normalUniformX = 0.0f;
|
private float normalUniformX = 0.0f;
|
||||||
private float normalUniformY = 0.0f;
|
private float normalUniformY = 0.0f;
|
||||||
private float normalUniformZ = 0.0f;
|
private float normalUniformZ = 0.0f;
|
||||||
public void setNormal(float x, float y, float z) {
|
|
||||||
if(normalUniformX != x || normalUniformY != y || normalUniformZ != z) {
|
private int anisotropicFixSerial = -1;
|
||||||
normalUniformX = x;
|
private int colorSerial = -1;
|
||||||
normalUniformY = y;
|
private int normalSerial = -1;
|
||||||
normalUniformZ = z;
|
private int tex0Serial = -1;
|
||||||
_wglUniform3f(u_normalUniform, normalUniformX, normalUniformY, normalUniformZ);
|
private int tex1Serial = -1;
|
||||||
|
private int texPlaneSerial = -1;
|
||||||
|
private int texSSerial = -1;
|
||||||
|
private int texTSerial = -1;
|
||||||
|
private int texRSerial = -1;
|
||||||
|
private int texQSerial = -1;
|
||||||
|
private int fogColorSerial = -1;
|
||||||
|
private int fogCfgSerial = -1;
|
||||||
|
private int matModelSerialCounter = -1;
|
||||||
|
private int matProjSerialCounter = -1;
|
||||||
|
private int matTexSerialCounter = -1;
|
||||||
|
private int lightPos0Serial = -1;
|
||||||
|
private int lightPos1Serial = -1;
|
||||||
|
|
||||||
|
static int texS_plane = -1;
|
||||||
|
static float texS_X = -999.0f;
|
||||||
|
static float texS_Y = -999.0f;
|
||||||
|
static float texS_Z = -999.0f;
|
||||||
|
static float texS_W = -999.0f;
|
||||||
|
|
||||||
|
static int texT_plane = -1;
|
||||||
|
static float texT_X = -999.0f;
|
||||||
|
static float texT_Y = -999.0f;
|
||||||
|
static float texT_Z = -999.0f;
|
||||||
|
static float texT_W = -999.0f;
|
||||||
|
|
||||||
|
static int texR_plane = -1;
|
||||||
|
static float texR_X = -999.0f;
|
||||||
|
static float texR_Y = -999.0f;
|
||||||
|
static float texR_Z = -999.0f;
|
||||||
|
static float texR_W = -999.0f;
|
||||||
|
|
||||||
|
static int texQ_plane = -1;
|
||||||
|
static float texQ_X = -999.0f;
|
||||||
|
static float texQ_Y = -999.0f;
|
||||||
|
static float texQ_Z = -999.0f;
|
||||||
|
static float texQ_W = -999.0f;
|
||||||
|
|
||||||
|
public void update() {
|
||||||
|
if(anisotropicFixSerial != EaglerAdapterGL30.anisotropicFixSerial) {
|
||||||
|
float x = EaglerAdapterGL30.anisotropicFixX;
|
||||||
|
float y = EaglerAdapterGL30.anisotropicFixY;
|
||||||
|
anisotropicFixSerial = EaglerAdapterGL30.anisotropicFixSerial;
|
||||||
|
if(anisotropicFix.x != x || anisotropicFix.y != y) {
|
||||||
|
anisotropicFix.x = x;
|
||||||
|
anisotropicFix.y = y;
|
||||||
|
_wglUniform2f(u_anisotropic_fix, x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(colorSerial != EaglerAdapterGL30.colorSerial) {
|
||||||
|
float r = EaglerAdapterGL30.colorR;
|
||||||
|
float g = EaglerAdapterGL30.colorG;
|
||||||
|
float b = EaglerAdapterGL30.colorB;
|
||||||
|
float a = EaglerAdapterGL30.colorA;
|
||||||
|
colorSerial = EaglerAdapterGL30.colorSerial;
|
||||||
|
if(colorUniformR != r || colorUniformG != g || colorUniformB != b || colorUniformA != a) {
|
||||||
|
colorUniformR = r;
|
||||||
|
colorUniformG = g;
|
||||||
|
colorUniformB = b;
|
||||||
|
colorUniformA = a;
|
||||||
|
_wglUniform4f(u_colorUniform, r, g, b, a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(normalSerial != EaglerAdapterGL30.normalSerial) {
|
||||||
|
float x = EaglerAdapterGL30.normalX;
|
||||||
|
float y = EaglerAdapterGL30.normalY;
|
||||||
|
float z = EaglerAdapterGL30.normalZ;
|
||||||
|
normalSerial = EaglerAdapterGL30.normalSerial;
|
||||||
|
if(normalUniformX != x || normalUniformY != y || normalUniformZ != z) {
|
||||||
|
normalUniformX = x;
|
||||||
|
normalUniformY = y;
|
||||||
|
normalUniformZ = z;
|
||||||
|
_wglUniform3f(u_normalUniform, x, y, z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(tex0Serial != EaglerAdapterGL30.tex0Serial) {
|
||||||
|
float x = EaglerAdapterGL30.tex0X;
|
||||||
|
float y = EaglerAdapterGL30.tex0Y;
|
||||||
|
tex0Serial = EaglerAdapterGL30.tex0Serial;
|
||||||
|
if(tex0x != x || tex0y != y) {
|
||||||
|
tex0x = x;
|
||||||
|
tex0y = y;
|
||||||
|
_wglUniform2f(u_texCoordV0, x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(tex1Serial != EaglerAdapterGL30.tex1Serial) {
|
||||||
|
float x = EaglerAdapterGL30.tex1X;
|
||||||
|
float y = EaglerAdapterGL30.tex1Y;
|
||||||
|
tex1Serial = EaglerAdapterGL30.tex1Serial;
|
||||||
|
if(tex1x != x || tex1y != y) {
|
||||||
|
tex1x = x;
|
||||||
|
tex1y = y;
|
||||||
|
_wglUniform2f(u_texCoordV1, x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(texPlaneSerial != EaglerAdapterGL30.texPlaneSerial) {
|
||||||
|
int s = EaglerAdapterGL30.texS_plane;
|
||||||
|
int t = EaglerAdapterGL30.texT_plane;
|
||||||
|
int r = EaglerAdapterGL30.texR_plane;
|
||||||
|
int q = EaglerAdapterGL30.texQ_plane;
|
||||||
|
texPlaneSerial = EaglerAdapterGL30.texPlaneSerial;
|
||||||
|
if(texS_plane != s || texT_plane != t || texR_plane != r || texQ_plane != q) {
|
||||||
|
texS_plane = s;
|
||||||
|
texT_plane = t;
|
||||||
|
texR_plane = r;
|
||||||
|
texQ_plane = q;
|
||||||
|
_wglUniform4i(u_textureGen_M, s, t, r, q);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(texSSerial != EaglerAdapterGL30.texSSerial) {
|
||||||
|
float x = EaglerAdapterGL30.texS_X;
|
||||||
|
float y = EaglerAdapterGL30.texS_Y;
|
||||||
|
float z = EaglerAdapterGL30.texS_Z;
|
||||||
|
float w = EaglerAdapterGL30.texS_W;
|
||||||
|
texSSerial = EaglerAdapterGL30.texSSerial;
|
||||||
|
if(texS_X != x || texS_Y != y || texS_Z != z || texS_W != w) {
|
||||||
|
texS_X = x;
|
||||||
|
texS_Y = y;
|
||||||
|
texS_Z = z;
|
||||||
|
texS_W = w;
|
||||||
|
_wglUniform4f(u_textureGenS_V, x, y, z, w);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(texTSerial != EaglerAdapterGL30.texTSerial) {
|
||||||
|
float x = EaglerAdapterGL30.texT_X;
|
||||||
|
float y = EaglerAdapterGL30.texT_Y;
|
||||||
|
float z = EaglerAdapterGL30.texT_Z;
|
||||||
|
float w = EaglerAdapterGL30.texT_W;
|
||||||
|
texTSerial = EaglerAdapterGL30.texTSerial;
|
||||||
|
if(texT_X != x || texT_Y != y || texT_Z != z || texT_W != w) {
|
||||||
|
texT_X = x;
|
||||||
|
texT_Y = y;
|
||||||
|
texT_Z = z;
|
||||||
|
texT_W = w;
|
||||||
|
_wglUniform4f(u_textureGenT_V, x, y, z, w);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(texRSerial != EaglerAdapterGL30.texRSerial) {
|
||||||
|
float x = EaglerAdapterGL30.texR_X;
|
||||||
|
float y = EaglerAdapterGL30.texR_Y;
|
||||||
|
float z = EaglerAdapterGL30.texR_Z;
|
||||||
|
float w = EaglerAdapterGL30.texR_W;
|
||||||
|
texRSerial = EaglerAdapterGL30.texRSerial;
|
||||||
|
if(texR_X != x || texR_Y != y || texR_Z != z || texR_W != w) {
|
||||||
|
texR_X = x;
|
||||||
|
texR_Y = y;
|
||||||
|
texR_Z = z;
|
||||||
|
texR_W = w;
|
||||||
|
_wglUniform4f(u_textureGenR_V, x, y, z, w);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(texQSerial != EaglerAdapterGL30.texQSerial) {
|
||||||
|
float x = EaglerAdapterGL30.texQ_X;
|
||||||
|
float y = EaglerAdapterGL30.texQ_Y;
|
||||||
|
float z = EaglerAdapterGL30.texQ_Z;
|
||||||
|
float w = EaglerAdapterGL30.texQ_W;
|
||||||
|
texQSerial = EaglerAdapterGL30.texQSerial;
|
||||||
|
if(texQ_X != x || texQ_Y != y || texQ_Z != z || texQ_W != w) {
|
||||||
|
texQ_X = x;
|
||||||
|
texQ_Y = y;
|
||||||
|
texQ_Z = z;
|
||||||
|
texQ_W = w;
|
||||||
|
_wglUniform4f(u_textureGenQ_V, x, y, z, w);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(fogColorSerial != EaglerAdapterGL30.fogColorSerial) {
|
||||||
|
float r = EaglerAdapterGL30.fogColorR;
|
||||||
|
float g = EaglerAdapterGL30.fogColorG;
|
||||||
|
float b = EaglerAdapterGL30.fogColorB;
|
||||||
|
float a = EaglerAdapterGL30.fogColorA;
|
||||||
|
fogColorSerial = EaglerAdapterGL30.fogColorSerial;
|
||||||
|
if(fogColorR != r || fogColorG != g || fogColorB != b || fogColorA != a) {
|
||||||
|
fogColorR = r;
|
||||||
|
fogColorG = g;
|
||||||
|
fogColorB = b;
|
||||||
|
fogColorA = a;
|
||||||
|
_wglUniform4f(u_fogColor, r, g, b, a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(fogCfgSerial != EaglerAdapterGL30.fogCfgSerial) {
|
||||||
|
int fogModex = EaglerAdapterGL30.fogMode;
|
||||||
|
float fogStarty = EaglerAdapterGL30.fogStart;
|
||||||
|
float fogEndz = EaglerAdapterGL30.fogEnd - fogStarty;
|
||||||
|
float fogDensityw = EaglerAdapterGL30.fogDensity;
|
||||||
|
fogCfgSerial = EaglerAdapterGL30.fogCfgSerial;
|
||||||
|
if(fogMode != fogModex || fogStart != fogStarty ||
|
||||||
|
fogEnd != fogEndz || fogDensity != fogDensityw) {
|
||||||
|
fogMode = fogModex;
|
||||||
|
fogStart = fogStarty;
|
||||||
|
fogEnd = fogEndz;
|
||||||
|
fogDensity = fogDensityw;
|
||||||
|
_wglUniform4f(u_fogParam, fogModex, fogStarty, fogEndz, fogDensityw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
float limit = EaglerAdapterGL30.alphaThresh;
|
||||||
|
if(alphaTestValue != limit) {
|
||||||
|
alphaTestValue = limit;
|
||||||
|
_wglUniform1f(u_alphaTestF, limit);
|
||||||
|
}
|
||||||
|
float[] matCopyBuffer = matBuffer;
|
||||||
|
int i = EaglerAdapterGL30.matModelPointer;
|
||||||
|
int j = EaglerAdapterGL30.matModelVSerial[i];
|
||||||
|
if(matModelSerialCounter != j) {
|
||||||
|
matModelSerialCounter = j;
|
||||||
|
EaglerAdapterGL30.matModelV[i].store(matCopyBuffer);
|
||||||
|
_wglUniformMat4fv(u_matrix_m, matCopyBuffer);
|
||||||
|
}
|
||||||
|
i = EaglerAdapterGL30.matProjPointer;
|
||||||
|
j = EaglerAdapterGL30.matProjVSerial[i];
|
||||||
|
if(matProjSerialCounter != j) {
|
||||||
|
matProjSerialCounter = j;
|
||||||
|
EaglerAdapterGL30.matProjV[i].store(matCopyBuffer);
|
||||||
|
_wglUniformMat4fv(u_matrix_p, matCopyBuffer);
|
||||||
|
}
|
||||||
|
i = EaglerAdapterGL30.matTexPointer;
|
||||||
|
j = EaglerAdapterGL30.matTexVSerial[i];
|
||||||
|
if(matTexSerialCounter != j) {
|
||||||
|
matTexSerialCounter = j;
|
||||||
|
EaglerAdapterGL30.matTexV[i].store(matCopyBuffer);
|
||||||
|
_wglUniformMat4fv(u_matrix_t, matCopyBuffer);
|
||||||
|
}
|
||||||
|
if(lightPos0Serial != EaglerAdapterGL30.lightPos0Serial) {
|
||||||
|
lightPos0Serial = EaglerAdapterGL30.lightPos0Serial;
|
||||||
|
Vector4f pos = EaglerAdapterGL30.lightPos0vec;
|
||||||
|
if(!pos.equals(light0Pos)) {
|
||||||
|
light0Pos.set(pos);
|
||||||
|
_wglUniform3f(u_light0Pos, pos.x, pos.y, pos.z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(lightPos1Serial != EaglerAdapterGL30.lightPos1Serial) {
|
||||||
|
lightPos1Serial = EaglerAdapterGL30.lightPos1Serial;
|
||||||
|
Vector4f pos = EaglerAdapterGL30.lightPos1vec;
|
||||||
|
if(!pos.equals(light1Pos)) {
|
||||||
|
light1Pos.set(pos);
|
||||||
|
_wglUniform3f(u_light1Pos, pos.x, pos.y, pos.z);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user