fixes, part 2
This commit is contained in:
parent
0154bd9744
commit
60fc4bc096
|
@ -86,21 +86,22 @@ uniform vec3 normalUniform;
|
|||
#endif
|
||||
#ifdef CC_fog
|
||||
uniform vec4 fogColor;
|
||||
uniform int fogMode;
|
||||
uniform float fogStart;
|
||||
uniform float fogEnd;
|
||||
uniform float fogDensity;
|
||||
uniform float fogPremultiply;
|
||||
//X = uniform float fogMode;
|
||||
//Y = uniform float fogStart;
|
||||
//Z = uniform float fogEnd - fogStart;
|
||||
//W = uniform float fogDensity;
|
||||
uniform vec4 fogParam;
|
||||
#endif
|
||||
uniform vec4 colorUniform;
|
||||
#ifdef CC_alphatest
|
||||
uniform float alphaTestF;
|
||||
#endif
|
||||
#ifdef CC_TEX_GEN_STRQ
|
||||
uniform int textureGenS_M;
|
||||
uniform int textureGenT_M;
|
||||
uniform int textureGenR_M;
|
||||
uniform int textureGenQ_M;
|
||||
//uniform int textureGenS_M;
|
||||
//uniform int textureGenT_M;
|
||||
//uniform int textureGenR_M;
|
||||
//uniform int textureGenQ_M;
|
||||
uniform ivec4 textureGen_M;
|
||||
uniform vec4 textureGenS_V;
|
||||
uniform vec4 textureGenT_V;
|
||||
uniform vec4 textureGenR_V;
|
||||
|
@ -144,10 +145,10 @@ void main(){
|
|||
texSrc[1] = v_position;
|
||||
|
||||
vec4 texPos;
|
||||
texPos.x = dot(texSrc[textureGenS_M], textureGenS_V);
|
||||
texPos.y = dot(texSrc[textureGenT_M], textureGenT_V);
|
||||
texPos.z = dot(texSrc[textureGenR_M], textureGenR_V);
|
||||
texPos.w = dot(texSrc[textureGenQ_M], textureGenQ_V);
|
||||
texPos.x = dot(texSrc[textureGen_M.x], textureGenS_V);
|
||||
texPos.y = dot(texSrc[textureGen_M.y], textureGenT_V);
|
||||
texPos.z = dot(texSrc[textureGen_M.z], textureGenR_V);
|
||||
texPos.w = dot(texSrc[textureGen_M.w], textureGenQ_V);
|
||||
texPos = matrix_t * texPos;
|
||||
color *= texture(tex0, texPos.xy / texPos.w).bgra;
|
||||
#ifdef CC_alphatest
|
||||
|
@ -210,7 +211,7 @@ void main(){
|
|||
|
||||
#ifdef CC_fog
|
||||
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);
|
||||
#endif
|
||||
|
||||
|
|
|
@ -133,100 +133,131 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
|
||||
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;
|
||||
private static boolean enableTexture2D_1 = false;
|
||||
private static boolean enableLighting = false;
|
||||
private static boolean enableAlphaTest = false;
|
||||
private static float alphaThresh = 0.1f;
|
||||
static boolean enableTexture2D = false;
|
||||
static boolean enableTexture2D_1 = false;
|
||||
static boolean enableLighting = false;
|
||||
static boolean enableAlphaTest = false;
|
||||
static float alphaThresh = 0.1f;
|
||||
|
||||
private static boolean isCompilingDisplayList = false;
|
||||
private static DisplayList compilingDisplayList = null;
|
||||
static boolean isDepthTest = false;
|
||||
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;
|
||||
private static boolean enableNormalArray = false;
|
||||
private static boolean enableTex0Array = false;
|
||||
private static boolean enableTex1Array = false;
|
||||
static boolean isCompilingDisplayList = false;
|
||||
static DisplayList compilingDisplayList = null;
|
||||
|
||||
private static boolean enableAnisotropicFix = false;
|
||||
private static float anisotropicFixX = 1024.0f;
|
||||
private static float anisotropicFixY = 1024.0f;
|
||||
static boolean enableColorArray = false;
|
||||
static boolean enableNormalArray = false;
|
||||
static boolean enableTex0Array = false;
|
||||
static boolean enableTex1Array = false;
|
||||
|
||||
private static float colorR = 1.0f;
|
||||
private static float colorG = 1.0f;
|
||||
private static float colorB = 1.0f;
|
||||
private static float colorA = 1.0f;
|
||||
static boolean enableAnisotropicFix = false;
|
||||
static int anisotropicFixSerial = 0;
|
||||
static float anisotropicFixX = 1024.0f;
|
||||
static float anisotropicFixY = 1024.0f;
|
||||
|
||||
private static float normalX = 1.0f;
|
||||
private static float normalY = 0.0f;
|
||||
private static float normalZ = 0.0f;
|
||||
static int colorSerial = 0;
|
||||
static float colorR = 1.0f;
|
||||
static float colorG = 1.0f;
|
||||
static float colorB = 1.0f;
|
||||
static float colorA = 1.0f;
|
||||
|
||||
private static int selectedTex = 0;
|
||||
private static int selectedClientTex = 0;
|
||||
private static float tex0X = 0;
|
||||
private static float tex0Y = 0;
|
||||
private static float tex1X = 0;
|
||||
private static float tex1Y = 0;
|
||||
private static TextureGL boundTexture0 = null;
|
||||
private static boolean enableAnisotropicPatch = false;
|
||||
private static boolean hintAnisotropicPatch = false;
|
||||
private static boolean swapRB = false;
|
||||
static int normalSerial = 0;
|
||||
static float normalX = 1.0f;
|
||||
static float normalY = 0.0f;
|
||||
static float normalZ = 0.0f;
|
||||
|
||||
static int selectedTex = 0;
|
||||
static int selectedClientTex = 0;
|
||||
static int[] boundTex = new int[2];
|
||||
static int tex0Serial = 0;
|
||||
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) {
|
||||
enableAnisotropicPatch = e;
|
||||
}
|
||||
|
||||
private static boolean enableTexGen = false;
|
||||
private static boolean enableColorMaterial = false;
|
||||
static boolean enableTexGen = false;
|
||||
static boolean enableColorMaterial = false;
|
||||
|
||||
private static int texS_plane = 0;
|
||||
private static float texS_X = 0.0f;
|
||||
private static float texS_Y = 0.0f;
|
||||
private static float texS_Z = 0.0f;
|
||||
private static float texS_W = 0.0f;
|
||||
static int texPlaneSerial = 0;
|
||||
static int texSSerial = 0;
|
||||
static int texS_plane = 0;
|
||||
static float texS_X = 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;
|
||||
private static float texT_X = 0.0f;
|
||||
private static float texT_Y = 0.0f;
|
||||
private static float texT_Z = 0.0f;
|
||||
private static float texT_W = 0.0f;
|
||||
static int texTSerial = 0;
|
||||
static int texT_plane = 0;
|
||||
static float texT_X = 0.0f;
|
||||
static float texT_Y = 0.0f;
|
||||
static float texT_Z = 0.0f;
|
||||
static float texT_W = 0.0f;
|
||||
|
||||
private static int texR_plane = 0;
|
||||
private static float texR_X = 0.0f;
|
||||
private static float texR_Y = 0.0f;
|
||||
private static float texR_Z = 0.0f;
|
||||
private static float texR_W = 0.0f;
|
||||
static int texRSerial = 0;
|
||||
static int texR_plane = 0;
|
||||
static float texR_X = 0.0f;
|
||||
static float texR_Y = 0.0f;
|
||||
static float texR_Z = 0.0f;
|
||||
static float texR_W = 0.0f;
|
||||
|
||||
private static int texQ_plane = 0;
|
||||
private static float texQ_X = 0.0f;
|
||||
private static float texQ_Y = 0.0f;
|
||||
private static float texQ_Z = 0.0f;
|
||||
private static float texQ_W = 0.0f;
|
||||
static int texQSerial = 0;
|
||||
static int texQ_plane = 0;
|
||||
static float texQ_X = 0.0f;
|
||||
static float texQ_Y = 0.0f;
|
||||
static float texQ_Z = 0.0f;
|
||||
static float texQ_W = 0.0f;
|
||||
|
||||
private static float fogColorR = 1.0f;
|
||||
private static float fogColorG = 1.0f;
|
||||
private static float fogColorB = 1.0f;
|
||||
private static float fogColorA = 1.0f;
|
||||
private static int fogMode = 1;
|
||||
private static boolean fogEnabled = false;
|
||||
private static boolean fogPremultiply = false;
|
||||
private static float fogStart = 1.0f;
|
||||
private static float fogEnd = 1.0f;
|
||||
private static float fogDensity = 1.0f;
|
||||
static int fogColorSerial = 0;
|
||||
static float fogColorR = 1.0f;
|
||||
static float fogColorG = 1.0f;
|
||||
static float fogColorB = 1.0f;
|
||||
static float fogColorA = 1.0f;
|
||||
static int fogCfgSerial = 0;
|
||||
static int fogMode = 1;
|
||||
static boolean fogEnabled = false;
|
||||
static float fogStart = 1.0f;
|
||||
static float fogEnd = 1.0f;
|
||||
static float fogDensity = 1.0f;
|
||||
|
||||
private static int bytesUploaded = 0;
|
||||
private static int vertexDrawn = 0;
|
||||
private static int triangleDrawn = 0;
|
||||
static int bytesUploaded = 0;
|
||||
static int vertexDrawn = 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 int matModelPointer = 0;
|
||||
|
||||
static int matProjSerialCounter = 0;
|
||||
static int[] matProjVSerial = new int[6];
|
||||
static Matrix4f[] matProjV = new Matrix4f[6];
|
||||
static int matProjPointer = 0;
|
||||
|
||||
static int matTexSerialCounter = 0;
|
||||
static int[] matTexVSerial = new int[16];
|
||||
static Matrix4f[] matTexV = new Matrix4f[16];
|
||||
static int matTexPointer = 0;
|
||||
|
||||
|
@ -280,13 +311,22 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
public static final void glEnable(int p1) {
|
||||
switch (p1) {
|
||||
case GL_DEPTH_TEST:
|
||||
_wglEnable(_wGL_DEPTH_TEST);
|
||||
if(!isDepthTest) {
|
||||
_wglEnable(_wGL_DEPTH_TEST);
|
||||
isDepthTest = true;
|
||||
}
|
||||
break;
|
||||
case GL_CULL_FACE:
|
||||
_wglEnable(_wGL_CULL_FACE);
|
||||
if(!isCullFace) {
|
||||
_wglEnable(_wGL_CULL_FACE);
|
||||
isCullFace = true;
|
||||
}
|
||||
break;
|
||||
case GL_BLEND:
|
||||
_wglEnable(_wGL_BLEND);
|
||||
if(!isBlend) {
|
||||
_wglEnable(_wGL_BLEND);
|
||||
isBlend = true;
|
||||
}
|
||||
break;
|
||||
case GL_RESCALE_NORMAL:
|
||||
break;
|
||||
|
@ -317,7 +357,10 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
enableTexGen = true;
|
||||
break;
|
||||
case GL_POLYGON_OFFSET_FILL:
|
||||
_wglEnable(_wGL_POLYGON_OFFSET_FILL);
|
||||
if(!isPolygonOffset) {
|
||||
_wglEnable(_wGL_POLYGON_OFFSET_FILL);
|
||||
isPolygonOffset = true;
|
||||
}
|
||||
break;
|
||||
case EAG_SWAP_RB:
|
||||
swapRB = true;
|
||||
|
@ -349,7 +392,10 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
default:
|
||||
break;
|
||||
}
|
||||
_wglDepthFunc(f);
|
||||
if(f != currentDepthFunc) {
|
||||
_wglDepthFunc(f);
|
||||
currentDepthFunc = f;
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
_wglCullFace(p1);
|
||||
if(p1 != currentCullFace) {
|
||||
_wglCullFace(p1);
|
||||
currentCullFace = p1;
|
||||
}
|
||||
}
|
||||
|
||||
public static final void glMatrixMode(int p1) {
|
||||
matrixMode = p1;
|
||||
}
|
||||
|
||||
private static final Matrix4f getMatrix() {
|
||||
private static final Matrix4f getMatrixIncrSerial() {
|
||||
switch (matrixMode) {
|
||||
case GL_MODELVIEW:
|
||||
default:
|
||||
matModelVSerial[matModelPointer] = ++matModelSerialCounter;
|
||||
return matModelV[matModelPointer];
|
||||
case GL_PROJECTION:
|
||||
matProjVSerial[matProjPointer] = ++matProjSerialCounter;
|
||||
return matProjV[matProjPointer];
|
||||
case GL_TEXTURE:
|
||||
matTexVSerial[matTexPointer] = ++matTexSerialCounter;
|
||||
return matTexV[matTexPointer];
|
||||
}
|
||||
}
|
||||
|
||||
public static final void glLoadIdentity() {
|
||||
getMatrix().setIdentity();
|
||||
getMatrixIncrSerial().setIdentity();
|
||||
}
|
||||
|
||||
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) {
|
||||
Matrix4f res = getMatrix();
|
||||
Matrix4f res = getMatrixIncrSerial();
|
||||
res.m00 = 2.0f / (right - left);
|
||||
res.m01 = 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) {
|
||||
deevis.set(p1, p2, p3);
|
||||
getMatrix().translate(deevis);
|
||||
getMatrixIncrSerial().translate(deevis);
|
||||
if (isCompilingDisplayList) {
|
||||
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) {
|
||||
switch (p1) {
|
||||
case GL_DEPTH_TEST:
|
||||
_wglDisable(_wGL_DEPTH_TEST);
|
||||
if(isDepthTest) {
|
||||
_wglDisable(_wGL_DEPTH_TEST);
|
||||
isDepthTest = false;
|
||||
}
|
||||
break;
|
||||
case GL_CULL_FACE:
|
||||
_wglDisable(_wGL_CULL_FACE);
|
||||
if(isCullFace) {
|
||||
_wglDisable(_wGL_CULL_FACE);
|
||||
isCullFace = false;
|
||||
}
|
||||
break;
|
||||
case GL_BLEND:
|
||||
_wglDisable(_wGL_BLEND);
|
||||
if(isBlend) {
|
||||
_wglDisable(_wGL_BLEND);
|
||||
isBlend = false;
|
||||
}
|
||||
break;
|
||||
case GL_RESCALE_NORMAL:
|
||||
break;
|
||||
|
@ -462,7 +523,10 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
enableTexGen = false;
|
||||
break;
|
||||
case GL_POLYGON_OFFSET_FILL:
|
||||
_wglDisable(_wGL_POLYGON_OFFSET_FILL);
|
||||
if(isPolygonOffset) {
|
||||
_wglDisable(_wGL_POLYGON_OFFSET_FILL);
|
||||
isPolygonOffset = false;
|
||||
}
|
||||
break;
|
||||
case EAG_SWAP_RB:
|
||||
swapRB = false;
|
||||
|
@ -473,6 +537,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
}
|
||||
|
||||
public static final void glColor4f(float p1, float p2, float p3, float p4) {
|
||||
++colorSerial;
|
||||
colorR = p1;
|
||||
colorG = p2;
|
||||
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 lightPos1vec0 = new Vector4f();
|
||||
private static Vector4f lightPos0vec = new Vector4f();
|
||||
private static Vector4f lightPos1vec = new Vector4f();
|
||||
static Vector4f lightPos0vec = new Vector4f();
|
||||
static Vector4f lightPos1vec = new Vector4f();
|
||||
|
||||
public static final void copyModelToLightMatrix() {
|
||||
++lightPos0Serial;
|
||||
++lightPos1Serial;
|
||||
lightPos0vec0.set(lightPos0vec);
|
||||
lightPos1vec0.set(lightPos1vec);
|
||||
lightPos0vec.set(0.2f, 1.0f, -0.7f, 0.0f);
|
||||
|
@ -528,6 +597,8 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
}
|
||||
|
||||
public static final void flipLightMatrix() {
|
||||
++lightPos0Serial;
|
||||
++lightPos1Serial;
|
||||
lightPos0vec.x = -lightPos0vec.x;
|
||||
lightPos1vec.x = -lightPos1vec.x;
|
||||
lightPos0vec.y = -lightPos0vec.y;
|
||||
|
@ -537,6 +608,8 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
}
|
||||
|
||||
public static final void revertLightMatrix() {
|
||||
++lightPos0Serial;
|
||||
++lightPos1Serial;
|
||||
lightPos0vec.set(lightPos0vec0);
|
||||
lightPos1vec.set(lightPos1vec0);
|
||||
}
|
||||
|
@ -548,6 +621,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
if (matModelPointer < matModelV.length - 1) {
|
||||
++matModelPointer;
|
||||
matModelV[matModelPointer].load(matModelV[matModelPointer - 1]);
|
||||
matModelVSerial[matModelPointer] = matModelVSerial[matModelPointer - 1];
|
||||
} else {
|
||||
System.err.println("modelview matrix stack overflow");
|
||||
}
|
||||
|
@ -556,6 +630,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
if (matProjPointer < matProjV.length - 1) {
|
||||
++matProjPointer;
|
||||
matProjV[matProjPointer].load(matProjV[matProjPointer - 1]);
|
||||
matProjVSerial[matProjPointer] = matProjVSerial[matProjPointer - 1];
|
||||
} else {
|
||||
System.err.println("projection matrix stack overflow");
|
||||
}
|
||||
|
@ -564,6 +639,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
if (matTexPointer < matTexV.length - 1) {
|
||||
++matTexPointer;
|
||||
matTexV[matTexPointer].load(matTexV[matTexPointer - 1]);
|
||||
matTexVSerial[matTexPointer] = matTexVSerial[matTexPointer - 1];
|
||||
} else {
|
||||
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) {
|
||||
deevis.set(p2, p3, p4);
|
||||
getMatrix().rotate(p1 * toRad, deevis);
|
||||
getMatrixIncrSerial().rotate(p1 * toRad, deevis);
|
||||
if (isCompilingDisplayList) {
|
||||
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) {
|
||||
deevis.set(p1, p2, p3);
|
||||
getMatrix().scale(deevis);
|
||||
getMatrixIncrSerial().scale(deevis);
|
||||
if (isCompilingDisplayList) {
|
||||
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();
|
||||
|
||||
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) {
|
||||
fogPremultiply = (p1 == GL_ONE && p2 == GL_ONE_MINUS_SRC_ALPHA);
|
||||
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 {
|
||||
_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) {
|
||||
_wglDepthMask(p1);
|
||||
if(isDepthMask != p1) {
|
||||
_wglDepthMask(p1);
|
||||
isDepthMask = p1;
|
||||
}
|
||||
}
|
||||
|
||||
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() {
|
||||
|
@ -672,6 +764,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
enableAnisotropicFix = false;
|
||||
if (enableAnisotropicPatch && boundTexture0 != null && boundTexture0.anisotropic && boundTexture0.nearest) {
|
||||
enableAnisotropicFix = true;
|
||||
++anisotropicFixSerial;
|
||||
anisotropicFixX = boundTexture0.w;
|
||||
anisotropicFixY = boundTexture0.h;
|
||||
}
|
||||
|
@ -679,11 +772,14 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
}
|
||||
|
||||
public static final void glBindTexture(int p1, int p2) {
|
||||
TextureGL t = texObjects.get(p2);
|
||||
_wglBindTexture(_wGL_TEXTURE_2D, t);
|
||||
if (selectedTex == 0) {
|
||||
boundTexture0 = t;
|
||||
updateAnisotropicPatch();
|
||||
if(boundTex[selectedTex] != p2) {
|
||||
TextureGL t = texObjects.get(p2);
|
||||
_wglBindTexture(_wGL_TEXTURE_2D, t);
|
||||
if (selectedTex == 0) {
|
||||
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) {
|
||||
++normalSerial;
|
||||
float len = (float) Math.sqrt(p1 * p1 + p2 * p2 + p3 * p3);
|
||||
normalX = p1 / len;
|
||||
normalY = p2 / len;
|
||||
|
@ -731,8 +828,10 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
}
|
||||
|
||||
public static final void _wglBindVertexArray0(BufferArrayGL p1) {
|
||||
currentArray = p1;
|
||||
_wglBindVertexArray(p1);
|
||||
if(currentArray != p1) {
|
||||
currentArray = p1;
|
||||
_wglBindVertexArray(p1);
|
||||
}
|
||||
}
|
||||
|
||||
private static int displayListId = 0;
|
||||
|
@ -798,7 +897,9 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
|
||||
public static final HighPolyMesh loadMesh(String path) {
|
||||
try {
|
||||
return HighPolyMesh.loadMeshData(EaglerAdapter.loadResourceBytes(path));
|
||||
HighPolyMesh ret = HighPolyMesh.loadMeshData(EaglerAdapter.loadResourceBytes(path));
|
||||
currentArray = ret.vertexArray;
|
||||
return ret;
|
||||
} catch (IOException ex) {
|
||||
System.err.println("Could not load HighPolyMesh! " + ex.toString());
|
||||
ex.printStackTrace();
|
||||
|
@ -807,6 +908,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
}
|
||||
|
||||
public static final void glColor3f(float p1, float p2, float p3) {
|
||||
++colorSerial;
|
||||
colorR = p1;
|
||||
colorG = p2;
|
||||
colorB = p3;
|
||||
|
@ -828,6 +930,8 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
}
|
||||
switch (p1) {
|
||||
case GL_S:
|
||||
++texPlaneSerial;
|
||||
++texSSerial;
|
||||
texS_plane = (p2 == GL_EYE_PLANE ? 1 : 0);
|
||||
texS_X = vec.x;
|
||||
texS_Y = vec.y;
|
||||
|
@ -835,6 +939,8 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
texS_W = vec.w;
|
||||
break;
|
||||
case GL_T:
|
||||
++texPlaneSerial;
|
||||
++texTSerial;
|
||||
texT_plane = (p2 == GL_EYE_PLANE ? 1 : 0);
|
||||
texT_X = vec.x;
|
||||
texT_Y = vec.y;
|
||||
|
@ -842,6 +948,8 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
texT_W = vec.w;
|
||||
break;
|
||||
case GL_R:
|
||||
++texPlaneSerial;
|
||||
++texRSerial;
|
||||
texR_plane = (p2 == GL_EYE_PLANE ? 1 : 0);
|
||||
texR_X = vec.x;
|
||||
texR_Y = vec.y;
|
||||
|
@ -849,6 +957,8 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
texR_W = vec.w;
|
||||
break;
|
||||
case GL_Q:
|
||||
++texPlaneSerial;
|
||||
++texQSerial;
|
||||
texQ_plane = (p2 == GL_EYE_PLANE ? 1 : 0);
|
||||
texQ_X = vec.x;
|
||||
texQ_Y = vec.y;
|
||||
|
@ -908,7 +1018,11 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
}
|
||||
|
||||
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) {
|
||||
|
@ -1023,40 +1137,13 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
private static final void bindTheShader(int mode) {
|
||||
FixedFunctionShader s = shader = FixedFunctionShader.instance(mode);
|
||||
s.useProgram();
|
||||
if (enableAlphaTest) {
|
||||
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);
|
||||
}
|
||||
s.update();
|
||||
}
|
||||
|
||||
public static final void drawHighPoly(HighPolyMesh msh) {
|
||||
bindTheShader((msh.hasTexture ? (FixedFunctionShader.NORMAL | FixedFunctionShader.TEXTURE0)
|
||||
: FixedFunctionShader.NORMAL) | getShaderModeFlag1());
|
||||
_wglBindVertexArray(msh.vertexArray);
|
||||
_wglBindVertexArray0(msh.vertexArray);
|
||||
_wglDrawElements(_wGL_TRIANGLES, msh.indexCount, _wGL_UNSIGNED_SHORT, 0);
|
||||
triangleDrawn += msh.indexCount / 3;
|
||||
shader.unuseProgram();
|
||||
|
@ -1237,7 +1324,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
if (occlusion_vao == null)
|
||||
initializeOcclusionObjects();
|
||||
_wglUseProgram(occlusion_program);
|
||||
_wglBindVertexArray(occlusion_vao);
|
||||
_wglBindVertexArray0(occlusion_vao);
|
||||
if (!cachedOcclusionP.equals(matProjV[matProjPointer])) {
|
||||
cachedOcclusionP.load(matProjV[matProjPointer]);
|
||||
cachedOcclusionP.store(occlusionProj);
|
||||
|
@ -1302,9 +1389,11 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
switch (p2) {
|
||||
default:
|
||||
case GL_LINEAR:
|
||||
++fogCfgSerial;
|
||||
fogMode = 1;
|
||||
break;
|
||||
case GL_EXP:
|
||||
++fogCfgSerial;
|
||||
fogMode = 2;
|
||||
break;
|
||||
}
|
||||
|
@ -1314,12 +1403,15 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
public static final void glFogf(int p1, float p2) {
|
||||
switch (p1) {
|
||||
case GL_FOG_START:
|
||||
++fogCfgSerial;
|
||||
fogStart = p2;
|
||||
break;
|
||||
case GL_FOG_END:
|
||||
++fogCfgSerial;
|
||||
fogEnd = p2;
|
||||
break;
|
||||
case GL_FOG_DENSITY:
|
||||
++fogCfgSerial;
|
||||
fogDensity = p2;
|
||||
break;
|
||||
default:
|
||||
|
@ -1329,6 +1421,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
|
||||
public static final void glFog(int p1, FloatBuffer p2) {
|
||||
if (p1 == GL_FOG_COLOR) {
|
||||
++fogColorSerial;
|
||||
fogColorR = p2.get();
|
||||
fogColorG = 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) {
|
||||
switch (p1) {
|
||||
case GL_TEXTURE0:
|
||||
++tex0Serial;
|
||||
tex0X = p2;
|
||||
tex0Y = p3;
|
||||
break;
|
||||
case GL_TEXTURE1:
|
||||
++tex1Serial;
|
||||
tex1X = p2;
|
||||
tex1Y = p3;
|
||||
break;
|
||||
|
@ -1412,7 +1507,7 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
|||
}
|
||||
|
||||
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);
|
||||
res.m00 = cotangent / aspect;
|
||||
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) {
|
||||
Matrix4f res = getMatrix();
|
||||
Matrix4f res = getMatrixIncrSerial();
|
||||
float cotangent = (float) Math.cos(fovy * toRad * 0.5f) / (float) Math.sin(fovy * toRad * 0.5f);
|
||||
res.m00 = cotangent / aspect;
|
||||
res.m01 = 0.0f;
|
||||
|
|
|
@ -121,21 +121,22 @@ public class FixedFunctionShader {
|
|||
private UniformGL u_matrix_t = null;
|
||||
|
||||
private UniformGL u_fogColor = null;
|
||||
private UniformGL u_fogMode = null;
|
||||
private UniformGL u_fogStart = null;
|
||||
private UniformGL u_fogEnd = null;
|
||||
private UniformGL u_fogDensity = null;
|
||||
private UniformGL u_fogPremultiply = null;
|
||||
//private UniformGL u_fogMode = null;
|
||||
//private UniformGL u_fogStart = null;
|
||||
//private UniformGL u_fogEnd = null;
|
||||
//private UniformGL u_fogDensity = null;
|
||||
private UniformGL u_fogParam = null;
|
||||
|
||||
private UniformGL u_colorUniform = null;
|
||||
private UniformGL u_normalUniform = null;
|
||||
|
||||
private UniformGL u_alphaTestF = null;
|
||||
|
||||
private UniformGL u_textureGenS_M = null;
|
||||
private UniformGL u_textureGenT_M = null;
|
||||
private UniformGL u_textureGenR_M = null;
|
||||
private UniformGL u_textureGenQ_M = null;
|
||||
//private UniformGL u_textureGenS_M = null;
|
||||
//private UniformGL u_textureGenT_M = null;
|
||||
//private UniformGL u_textureGenR_M = null;
|
||||
//private UniformGL u_textureGenQ_M = null;
|
||||
private UniformGL u_textureGen_M = null;
|
||||
private UniformGL u_textureGenS_V = null;
|
||||
private UniformGL u_textureGenT_V = null;
|
||||
private UniformGL u_textureGenR_V = null;
|
||||
|
@ -277,11 +278,11 @@ public class FixedFunctionShader {
|
|||
|
||||
if(enable_fog) {
|
||||
u_fogColor = _wglGetUniformLocation(globject, "fogColor");
|
||||
u_fogMode = _wglGetUniformLocation(globject, "fogMode");
|
||||
u_fogStart = _wglGetUniformLocation(globject, "fogStart");
|
||||
u_fogEnd = _wglGetUniformLocation(globject, "fogEnd");
|
||||
u_fogDensity = _wglGetUniformLocation(globject, "fogDensity");
|
||||
u_fogPremultiply = _wglGetUniformLocation(globject, "fogPremultiply");
|
||||
//u_fogMode = _wglGetUniformLocation(globject, "fogMode");
|
||||
//u_fogStart = _wglGetUniformLocation(globject, "fogStart");
|
||||
//u_fogEnd = _wglGetUniformLocation(globject, "fogEnd");
|
||||
//u_fogDensity = _wglGetUniformLocation(globject, "fogDensity");
|
||||
u_fogParam = _wglGetUniformLocation(globject, "fogParam");
|
||||
}
|
||||
|
||||
if(enable_alphatest) {
|
||||
|
@ -289,10 +290,11 @@ public class FixedFunctionShader {
|
|||
}
|
||||
|
||||
if(enable_TEX_GEN_STRQ) {
|
||||
u_textureGenS_M = _wglGetUniformLocation(globject, "textureGenS_M");
|
||||
u_textureGenT_M = _wglGetUniformLocation(globject, "textureGenT_M");
|
||||
u_textureGenR_M = _wglGetUniformLocation(globject, "textureGenR_M");
|
||||
u_textureGenQ_M = _wglGetUniformLocation(globject, "textureGenQ_M");
|
||||
//u_textureGenS_M = _wglGetUniformLocation(globject, "textureGenS_M");
|
||||
//u_textureGenT_M = _wglGetUniformLocation(globject, "textureGenT_M");
|
||||
//u_textureGenR_M = _wglGetUniformLocation(globject, "textureGenR_M");
|
||||
//u_textureGenQ_M = _wglGetUniformLocation(globject, "textureGenQ_M");
|
||||
u_textureGen_M = _wglGetUniformLocation(globject, "textureGen_M");
|
||||
u_textureGenS_V = _wglGetUniformLocation(globject, "textureGenS_V");
|
||||
u_textureGenT_V = _wglGetUniformLocation(globject, "textureGenT_V");
|
||||
u_textureGenR_V = _wglGetUniformLocation(globject, "textureGenR_V");
|
||||
|
@ -317,7 +319,7 @@ public class FixedFunctionShader {
|
|||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void setupArrayForProgram() {
|
||||
_wglEnableVertexAttribArray(a_position);
|
||||
_wglVertexAttribPointer(a_position, 3, _wGL_FLOAT, false, 32, 0);
|
||||
|
@ -338,11 +340,11 @@ public class FixedFunctionShader {
|
|||
_wglVertexAttribPointer(a_texture1, 2, _wGL_SHORT, false, 32, 28);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void useProgram() {
|
||||
_wglUseProgram(globject);
|
||||
}
|
||||
|
||||
|
||||
public void unuseProgram() {
|
||||
|
||||
}
|
||||
|
@ -354,165 +356,281 @@ public class FixedFunctionShader {
|
|||
}
|
||||
}
|
||||
|
||||
private float[] modelBuffer = new float[16];
|
||||
private float[] projectionBuffer = new float[16];
|
||||
private float[] textureBuffer = new float[16];
|
||||
private float[] matBuffer = 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 light1Pos = new Vector4f();
|
||||
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;
|
||||
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 fogColorG = 0.0f;
|
||||
private float fogColorB = 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 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;
|
||||
public void setFogDensity(float d) {
|
||||
if(fogDensity != d) {
|
||||
fogDensity = d;
|
||||
_wglUniform1f(u_fogDensity, fogDensity);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
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 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 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 colorUniformG = 0.0f;
|
||||
private float colorUniformB = 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 normalUniformY = 0.0f;
|
||||
private float normalUniformZ = 0.0f;
|
||||
public void setNormal(float x, float y, float z) {
|
||||
if(normalUniformX != x || normalUniformY != y || normalUniformZ != z) {
|
||||
normalUniformX = x;
|
||||
normalUniformY = y;
|
||||
normalUniformZ = z;
|
||||
_wglUniform3f(u_normalUniform, normalUniformX, normalUniformY, normalUniformZ);
|
||||
|
||||
private int anisotropicFixSerial = -1;
|
||||
private int colorSerial = -1;
|
||||
private int normalSerial = -1;
|
||||
private int tex0Serial = -1;
|
||||
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