569 lines
16 KiB
C++
569 lines
16 KiB
C++
#include "OGL_Class.h"
|
|
#include "Rrasters.h"
|
|
|
|
void CopyFrameBufferToTexture(int x, int y, int w, int h, int textW, int textH);
|
|
|
|
/*
|
|
ulType =
|
|
0 -> Blur
|
|
1 -> RadialBlur
|
|
2 -> Zoom Smooth
|
|
3 -> Invert
|
|
4 -> GodRay
|
|
5 -> ZColor
|
|
6 -> Alpha To Color
|
|
7 -> Erosion
|
|
8 -> Contrast
|
|
9 -> Brightness
|
|
10 -> Multiply by Factor1
|
|
11 -> Add Factor1
|
|
12 -> mul Factor1=R Factor2=G Factor3=B
|
|
13 -> AlphaPremult Pass
|
|
*/
|
|
void OGL_DI::AfterEffect(u32 ulType,u32 Color,float Factor1,float Factor2,float Factor3 ,float Factor4 ,float Factor5 )
|
|
{
|
|
START_RASTER(AE_Effects);
|
|
|
|
if (ulType == 8) // Contrast
|
|
{
|
|
if (Factor1 <= 1.0f)
|
|
{
|
|
AfterEffect(3,0,0.5f - Factor1,0,0,0,0);
|
|
} else
|
|
{
|
|
while (Factor1 >= 2.0f)
|
|
{
|
|
AfterEffect(3,0,1.0f,0,0,0,0); // Invert
|
|
AfterEffect(11,0,0.25f,0.25f,0.25f,0,0); // Add 0.25f -> INVERT = SUB 0.25f
|
|
AfterEffect(3,0,1.0f,0,0,0,0); // Invert
|
|
AfterEffect(10,0,2.f,0,0,0,0); // Multiply 0.5f
|
|
Factor1 /= 2.0f;
|
|
}
|
|
AfterEffect(3,0,1.0f,0,0,0,0); // Invert
|
|
AfterEffect(11,0,(Factor1 - 1.0f) / 4.0f,(Factor1 - 1.0f) / 4.0f,(Factor1 - 1.0f) / 4.0f,0,0); // Add 0.25f -> INVERT = SUB 0.25f
|
|
AfterEffect(3,0,1.0f,0,0,0,0); // Invert
|
|
AfterEffect(10,0,Factor1,0,0,0,0); // Multiply
|
|
}
|
|
STOP_RASTER(AE_Effects)
|
|
return;
|
|
}
|
|
if (ulType == 9) // Brightness
|
|
{
|
|
if (Factor1 < 1.0f)
|
|
{
|
|
AfterEffect(10,0,Factor1,0,0,0,0);
|
|
} else
|
|
{
|
|
AfterEffect(3,0,1.0f,0,0,0,0); // Invert
|
|
AfterEffect(10,0,1.0f - (Factor1 - 1.f),0,0,0,0); // Multiply
|
|
AfterEffect(3,0,1.0f,0,0,0,0); // Invert
|
|
}
|
|
STOP_RASTER(AE_Effects)
|
|
return;
|
|
}
|
|
s32 AreaX = CurrentRect.right - CurrentRect.left;
|
|
s32 AreaY = CurrentRect.bottom - CurrentRect.top;
|
|
float ConvoleRevolution = 0.666666f;
|
|
u32 SavePicking;
|
|
|
|
SavePicking = PickingEnable;
|
|
PickingEnable = 0;
|
|
|
|
if (ulType != 5) Color = 0xffffffff;
|
|
|
|
|
|
|
|
// if (ulType == 2) ulType = 4;
|
|
|
|
|
|
SAVE_MATRIXES();
|
|
{
|
|
float Viewport[4];
|
|
glGetFloatv(GL_VIEWPORT,Viewport);
|
|
float UVMatrix[] = {1,0,0,1,0,0};
|
|
float CX,CY,YC;
|
|
UVMatrix[0] = Viewport[2] / (float)AreaX;
|
|
UVMatrix[3] = Viewport[3] / (float)AreaY;
|
|
UVMatrix[4] = Viewport[0] / (float)AreaX;
|
|
UVMatrix[5] = Viewport[1] / (float)AreaY;
|
|
CX = (float)AreaX / OGLTextureSizeX;
|
|
CY = (float)AreaY / OGLTextureSizeY;
|
|
GLfloat Persp2[16]= {
|
|
CX*UVMatrix[0], CX*UVMatrix[1], 0, 0,
|
|
CY*UVMatrix[2], CY*UVMatrix[3], 0, 0,
|
|
0, 0, 1, 0,
|
|
CX*UVMatrix[4], CY*UVMatrix[5], 0, 1,
|
|
};
|
|
SetMatrix(GL_TEXTURE,Persp2);
|
|
}
|
|
|
|
/* Save front buffer */
|
|
|
|
float Coef = (float)AreaY/(float)AreaX;
|
|
|
|
RS DefaultRS;
|
|
GLOB_SetDefaultRS(&DefaultRS);
|
|
DefaultRS.BACKFACE = 0;
|
|
DefaultRS.NOZTEST = 1;
|
|
DefaultRS.NOZWRITE = 1;
|
|
DefaultRS.HIDECOLOR = 1;
|
|
DefaultRS.HIDEALPHA = 0;
|
|
Matrix(NULL);
|
|
|
|
|
|
|
|
|
|
if (ulType == 13) // AlphaPremult
|
|
{
|
|
DefaultRS.BlendingMode = 1; // Alpha
|
|
Matrix(NULL);
|
|
Ortho();
|
|
DefaultRS.HIDECOLOR = 0;
|
|
DefaultRS.HIDEALPHA = 1;
|
|
SetRS(&DefaultRS,-1);
|
|
glBlendFunc(GL_ZERO,GL_DST_ALPHA);
|
|
u32 ColorM = 0xffffffff;
|
|
DrawQuad(ColorM,-1.0f, 1.0f * Coef ,+2.0f, -2.0f * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
PickingEnable = SavePicking;
|
|
RESTORE_MATRIXES();
|
|
STOP_RASTER(AE_Effects)
|
|
return;
|
|
} else
|
|
if (ulType == 11) // Add Factor1 (factor is in [0,1]) -> ONLY Brighter
|
|
{
|
|
DefaultRS.BlendingMode = 1; // Alpha
|
|
Matrix(NULL);
|
|
Ortho();
|
|
DefaultRS.HIDECOLOR = 0;
|
|
DefaultRS.HIDEALPHA = 0;
|
|
SetRS(&DefaultRS,-1);
|
|
glBlendFunc(GL_ONE,GL_ONE);
|
|
if (Factor1 > 1.0) Factor1 = 1.0f;
|
|
if (Factor1 < 0.0) Factor1 = 0.0f;
|
|
if (Factor2 > 1.0) Factor2 = 1.0f;
|
|
if (Factor2 < 0.0) Factor2 = 0.0f;
|
|
if (Factor3 > 1.0) Factor3 = 1.0f;
|
|
if (Factor3 < 0.0) Factor3 = 0.0f;
|
|
u32 ColorM = Factor1 * 255.0f;
|
|
ColorM |= (u32)(Factor2*255.0f) << 8;
|
|
ColorM |= (u32)(Factor3*255.0f) << 16;
|
|
ColorM |= 0xff000000;
|
|
DrawQuad(ColorM,-1.0f, 1.0f * Coef ,+2.0f, -2.0f * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
PickingEnable = SavePicking;
|
|
RESTORE_MATRIXES();
|
|
STOP_RASTER(AE_Effects)
|
|
return;
|
|
} else
|
|
if ((ulType == 10)||(ulType == 12)) // Multiply by Factor1 (factor is in [0,2])
|
|
{
|
|
DefaultRS.BlendingMode = 1; // Alpha
|
|
Matrix(NULL);
|
|
Ortho();
|
|
DefaultRS.HIDECOLOR = 0;
|
|
DefaultRS.HIDEALPHA = 0;
|
|
SetRS(&DefaultRS,-1);
|
|
|
|
if (ulType == 10)
|
|
{
|
|
Factor3 = Factor2 = Factor1;
|
|
}
|
|
if (Factor1 > 1.0f)
|
|
{
|
|
glBlendFunc(GL_DST_COLOR,GL_ONE);
|
|
Factor1 = Factor1 - 1.0f;
|
|
Factor2 = Factor2 - 1.0f;
|
|
Factor3 = Factor3 - 1.0f;
|
|
}
|
|
else
|
|
glBlendFunc(GL_ZERO,GL_SRC_COLOR);
|
|
if (Factor1 > 1.0) Factor1 = 1.0f;
|
|
if (Factor1 < 0.0) Factor1 = 0.0f;
|
|
if (Factor2 > 1.0) Factor2 = 1.0f;
|
|
if (Factor2 < 0.0) Factor2 = 0.0f;
|
|
if (Factor3 > 1.0) Factor3 = 1.0f;
|
|
if (Factor3 < 0.0) Factor3 = 0.0f;
|
|
|
|
u32 ColorM;
|
|
ColorM = Factor1 * 255.0f;
|
|
ColorM |= (u32)(Factor2 * 255.0f) << 8;
|
|
ColorM |= (u32)(Factor3 * 255.0f) << 16;
|
|
ColorM |= 0xff000000;
|
|
DrawQuad(ColorM,-1.0f, 1.0f * Coef ,+2.0f, -2.0f * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
PickingEnable = SavePicking;
|
|
RESTORE_MATRIXES();
|
|
STOP_RASTER(AE_Effects)
|
|
return;
|
|
} else
|
|
if (ulType == 6) // Color 2 Alpha
|
|
{
|
|
DefaultRS.BlendingMode = 1; // Alpha
|
|
Matrix(NULL);
|
|
Ortho();
|
|
DefaultRS.HIDECOLOR = 0;
|
|
DefaultRS.HIDEALPHA = 0;
|
|
SetRS(&DefaultRS,-1);
|
|
if (Factor1)
|
|
glBlendFunc(GL_ONE_MINUS_DST_ALPHA,GL_ZERO);
|
|
else
|
|
glBlendFunc(GL_DST_ALPHA,GL_ZERO);
|
|
DrawQuad(0xffffffff,-1.0f, 1.0f * Coef ,+2.0f, -2.0f * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
PickingEnable = SavePicking;
|
|
RESTORE_MATRIXES();
|
|
STOP_RASTER(AE_Effects)
|
|
return;
|
|
} else
|
|
if (ulType == 5) // ZColor
|
|
{
|
|
RS DefaultRS;
|
|
GLOB_SetDefaultRS(&DefaultRS);
|
|
DefaultRS.BACKFACE = 0;
|
|
DefaultRS.NOZTEST = 0;
|
|
DefaultRS.NOZWRITE = 1;
|
|
DefaultRS.HIDECOLOR = 0;
|
|
DefaultRS.HIDEALPHA = 0;
|
|
SetRS(&DefaultRS,-1);
|
|
if (Factor1 > 0.0) glDepthFunc(GL_LEQUAL);
|
|
Factor1 = fabs(Factor1);
|
|
Perspective(-1.0f);
|
|
float SaveCZ;
|
|
SaveCZ = ZQuad;
|
|
|
|
ZQuad = Factor1;
|
|
DrawQuad(Color,-1,1,2,-2,0.0f,0.0f,1.0f,1.0f/*,Factor1*/);
|
|
|
|
ZQuad = SaveCZ;
|
|
glDepthFunc(GL_GEQUAL);
|
|
PickingEnable = SavePicking;
|
|
RESTORE_MATRIXES();
|
|
STOP_RASTER(AE_Effects)
|
|
return;
|
|
} else
|
|
if (ulType == 18) // Invert Alpha
|
|
{
|
|
DefaultRS.BlendingMode = 1; // Alpha
|
|
Matrix(NULL);
|
|
Ortho();
|
|
DefaultRS.HIDECOLOR = 1;
|
|
DefaultRS.HIDEALPHA = 0;
|
|
SetRS(&DefaultRS,-1);
|
|
glBlendFunc(GL_ONE_MINUS_DST_COLOR,GL_ZERO);
|
|
u32 Color2;
|
|
if (Factor1 > 1.0f) Factor1 = 1.0f;
|
|
if (Factor1 < 0.0f) Factor1 = 0.0f;
|
|
Color2 = Factor1*255.0f;
|
|
Color2 |= Color2 <<8;
|
|
Color2 |= Color2 <<16;
|
|
DrawQuad(Color2,-1.0f, 1.0f * Coef ,+2.0f, -2.0f * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
PickingEnable = SavePicking;
|
|
RESTORE_MATRIXES();
|
|
STOP_RASTER(AE_Effects)
|
|
return;
|
|
}
|
|
|
|
|
|
Ortho();
|
|
|
|
|
|
|
|
SetRS(&DefaultRS,-1);
|
|
|
|
|
|
DrawQuad(0xffffffff,-1.0f, +1.0f * Coef,2.0f, -2.0f * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
if (ulType == 4) // GODEAY
|
|
{
|
|
glEnable(GL_TEXTURE_2D);
|
|
ValidateLayer(NUMBER_OF_WORKING_REF - 3);
|
|
CopyFrameBufferToTexture(ActivRect.left , ActivRect.top , ActivRect.left , ActivRect.top , ActivRect.right - ActivRect.left, ActivRect.bottom - ActivRect.top);
|
|
//YTEST glCopyTexSubImage2D(GL_TEXTURE_2D, 0 , ActivRect.left , ActivRect.top , ActivRect.left , ActivRect.top , ActivRect.right - ActivRect.left, ActivRect.bottom - ActivRect.top);
|
|
|
|
}
|
|
|
|
DefaultRS.HIDECOLOR = 0;
|
|
DefaultRS.HIDEALPHA = 1;
|
|
|
|
if (ulType == 3) // Invert
|
|
{
|
|
DefaultRS.BlendingMode = 1; // Alpha
|
|
Matrix(NULL);
|
|
Ortho();
|
|
SetRS(&DefaultRS,-1);
|
|
glBlendFunc(GL_ONE_MINUS_DST_COLOR,GL_SRC_ALPHA);
|
|
u32 Color2;
|
|
if (Factor1 > 1.0f) Factor1 = 1.0f;
|
|
if (Factor1 < 0.0f) Factor1 = 0.0f;
|
|
Color2 = Factor1*255.0f;
|
|
Color2 |= Color2 <<8;
|
|
Color2 |= Color2 <<16;
|
|
Color2 ^= 0xff000000;
|
|
DrawQuad(Color2,-1.0f, 1.0f * Coef ,+2.0f, -2.0f * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
FORCE_RENDER_FLAG |= 4;
|
|
|
|
} else
|
|
{
|
|
float BlurFactoC;
|
|
glEnable(GL_TEXTURE_2D);
|
|
ValidateLayer(NUMBER_OF_WORKING_REF - 2);
|
|
CopyFrameBufferToTexture(ActivRect.left , ActivRect.top , ActivRect.left , ActivRect.top , ActivRect.right - ActivRect.left, ActivRect.bottom - ActivRect.top);
|
|
//YTEST glCopyTexSubImage2D(GL_TEXTURE_2D, 0 , ActivRect.left , ActivRect.top , ActivRect.left , ActivRect.top , ActivRect.right - ActivRect.left, ActivRect.bottom - ActivRect.top);
|
|
|
|
|
|
|
|
BlurFactoC = Factor1;
|
|
if (ulType == 1) // RadialBlur
|
|
BlurFactoC = sqrt((Factor1 * Factor1 + Factor2 * Factor2));
|
|
|
|
while (abs(BlurFactoC) > 1.0f / 512.0f)
|
|
{
|
|
DefaultRS.BlendingMode = 1; // Alpha
|
|
if (ulType == 7)// Erosion
|
|
DefaultRS.BlendingMode = 5; // Erosion = Multiply
|
|
Matrix(NULL);
|
|
Ortho();
|
|
SetRS(&DefaultRS,-1);
|
|
glEnable(GL_TEXTURE_2D);
|
|
ValidateLayer(NUMBER_OF_WORKING_REF - 2);
|
|
|
|
if ((ulType == 0) || (ulType == 7))// Blurdddd or Erosion
|
|
{
|
|
/* method 1*/
|
|
DrawQuad(0xFFffffff,-1.0f+BlurFactoC, +1.0f * Coef,2.0f, -2.0f * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
DrawQuad(0x80ffffff,-1.0f ,BlurFactoC + 1.0f * Coef,+2.0f, -2.0f * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
DrawQuad(0x55ffffff,-1.0f-BlurFactoC, +1.0f * Coef,2.0f, -2.0f * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
DrawQuad(0x3Fffffff,-1.0f , +-BlurFactoC + 1.0f * Coef,2.0f, -2.0f * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
BlurFactoC *= 0.5f;
|
|
|
|
} else
|
|
if (ulType == 1) // RadialBlur
|
|
{
|
|
DrawQuad(0xFFffffff,-1.0f+Factor1, 1.0f * Coef +Factor2,2.0f, -2.0f * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
DrawQuad(0x80ffffff,-1.0f-Factor1, 1.0f * Coef -Factor2,+2.0f, -2.0f * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
Factor1*= 0.5f;
|
|
Factor2*= 0.5f;
|
|
BlurFactoC *= 0.5f;
|
|
|
|
} else
|
|
if (ulType == 2) // ZoomSmooth
|
|
{
|
|
float X1,Y1,X2,Y2;
|
|
X1 = -1.0f + BlurFactoC * Factor2 ;
|
|
X2 = +1.0f - BlurFactoC * (1.0f - Factor2) ;
|
|
Y1 = -1.0f + BlurFactoC * Factor3 ;
|
|
Y2 = +1.0f - BlurFactoC * (1.0f - Factor3) ;
|
|
DrawQuad(0xFFffffff,X1, -Y1* Coef,X2 - X1, -(Y2-Y1) * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
X1 = -1.0f - BlurFactoC * Factor2 ;
|
|
X2 = +1.0f + BlurFactoC * (1.0f - Factor2);
|
|
Y1 = -1.0f - BlurFactoC * Factor3;
|
|
Y2 = +1.0f + BlurFactoC * (1.0f - Factor3);
|
|
DrawQuad(0x80ffffff,X1, -Y1* Coef,X2 - X1, -(Y2-Y1) * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
BlurFactoC *= 0.5f;
|
|
|
|
} else
|
|
if (ulType == 4) // GODEAY
|
|
{
|
|
float X1,Y1,X2,Y2;
|
|
static u32 V1 = 0xFFffffff;
|
|
static u32 V2 = 0x80ffffff;
|
|
static u32 V3 = 0x80ffffff;
|
|
|
|
DefaultRS.BlendingMode = 1; // ADD
|
|
SetRS(&DefaultRS,-1);
|
|
glEnable(GL_TEXTURE_2D);
|
|
ValidateLayer(NUMBER_OF_WORKING_REF - 2);
|
|
|
|
X1 = -1.0f;
|
|
X2 = +1.0f;
|
|
Y1 = -1.0f;
|
|
Y2 = +1.0f;
|
|
DrawQuad(V1,X1, -Y1* Coef,X2 - X1, -(Y2-Y1) * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
|
|
DefaultRS.BlendingMode = 1; // ADD
|
|
SetRS(&DefaultRS,-1);
|
|
glEnable(GL_TEXTURE_2D);
|
|
ValidateLayer(NUMBER_OF_WORKING_REF - 2);
|
|
|
|
V2 = 0x00ffffff;
|
|
V2 |= ((int)(ConvoleRevolution * 255.0f) << 24);
|
|
V2 ^= 0xff000000;
|
|
ConvoleRevolution = (ConvoleRevolution - 0.5f) * 0.5f + 0.5f;
|
|
X1 = -1.0f - BlurFactoC * Factor2;
|
|
X2 = +1.0f + BlurFactoC * (1.0f - Factor2);
|
|
Y1 = -1.0f - BlurFactoC * Factor3;
|
|
Y2 = +1.0f + BlurFactoC * (1.0f - Factor3);
|
|
|
|
DrawQuad(V2,X1, -Y1* Coef,X2 - X1, -(Y2-Y1) * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
|
|
BlurFactoC *= 0.5f;
|
|
|
|
}
|
|
CopyFrameBufferToTexture(ActivRect.left , ActivRect.top , ActivRect.left , ActivRect.top , ActivRect.right - ActivRect.left, ActivRect.bottom - ActivRect.top);
|
|
//YTEST glCopyTexSubImage2D(GL_TEXTURE_2D, 0 , ActivRect.left , ActivRect.top , ActivRect.left , ActivRect.top , ActivRect.right - ActivRect.left, ActivRect.bottom - ActivRect.top);
|
|
}
|
|
}
|
|
|
|
if (ulType == 4) // GODEAY
|
|
{
|
|
float X1,Y1,X2,Y2;
|
|
u32 V1 = 0xFFffffff;
|
|
DefaultRS.BlendingMode = 0; // ADD
|
|
SetRS(&DefaultRS,-1);
|
|
glEnable(GL_TEXTURE_2D);
|
|
ValidateLayer(NUMBER_OF_WORKING_REF - 3);
|
|
|
|
X1 = -1.0f;
|
|
X2 = +1.0f;
|
|
Y1 = -1.0f;
|
|
Y2 = +1.0f;
|
|
DrawQuad(V1,X1, -Y1* Coef,X2 - X1, -(Y2-Y1) * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
|
|
DefaultRS.BlendingMode = 2; // ADD
|
|
SetRS(&DefaultRS,-1);
|
|
glEnable(GL_TEXTURE_2D);
|
|
ValidateLayer(NUMBER_OF_WORKING_REF - 2);
|
|
|
|
if (Factor4 < 0) Factor4 = 0;
|
|
if (Factor4 > 1.0) Factor4 = 1.0f;
|
|
V1 = (u32)(Factor4 * 255.0f);
|
|
V1 |= V1 <<8;
|
|
V1 |= V1 <<8;
|
|
DrawQuad(V1,X1, -Y1* Coef,X2 - X1, -(Y2-Y1) * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
|
|
}
|
|
|
|
|
|
PickingEnable = SavePicking;
|
|
|
|
RESTORE_MATRIXES();
|
|
STOP_RASTER(AE_Effects);
|
|
FORCE_RENDER_FLAG |= 4;
|
|
|
|
}
|
|
|
|
/*
|
|
AE_LayerSave = 0
|
|
AE_LayerBlend = 1
|
|
AE_LayerScreen = 2
|
|
AE_LayerMultiply = 3
|
|
AE_LayerPrviousAlpha = 4
|
|
AE_LayerCopy = 5
|
|
//*/
|
|
void OGL_DI::LayerOperation(u32 ulType,u32 SlotIndex,u32 Color,float Factor1,float Factor2)
|
|
{
|
|
START_RASTER(AE_Layer);
|
|
|
|
s32 AreaX = CurrentRect.right - CurrentRect.left;
|
|
s32 AreaY = CurrentRect.bottom - CurrentRect.top;
|
|
u32 SavePicking;
|
|
SavePicking = PickingEnable;
|
|
PickingEnable = 0;
|
|
SAVE_MATRIXES();
|
|
|
|
{
|
|
float Viewport[4];
|
|
glGetFloatv(GL_VIEWPORT,Viewport);
|
|
float UVMatrix[] = {1,0,0,1,0,0};
|
|
float CX,CY,YC;
|
|
if (ulType != 20)
|
|
{
|
|
UVMatrix[0] = Viewport[2] / (float)AreaX;
|
|
UVMatrix[3] = Viewport[3] / (float)AreaY;
|
|
UVMatrix[4] = Viewport[0] / (float)AreaX;
|
|
UVMatrix[5] = Viewport[1] / (float)AreaY;
|
|
|
|
} else ulType = 1;
|
|
CX = (float)AreaX / OGLTextureSizeX;
|
|
CY = (float)AreaY / OGLTextureSizeY;
|
|
GLfloat Persp2[16]= { CX*UVMatrix[0], CX*UVMatrix[1], 0, 0,
|
|
CY*UVMatrix[2], CY*UVMatrix[3], 0, 0,
|
|
0, 0, 1, 0,
|
|
CX*UVMatrix[4], CY*UVMatrix[5], 0, 1};
|
|
SetMatrix(GL_TEXTURE,Persp2);
|
|
|
|
}
|
|
RS DefaultRS;
|
|
GLOB_SetDefaultRS(&DefaultRS);
|
|
DefaultRS.BACKFACE = 0;
|
|
DefaultRS.NOZTEST = 1;
|
|
DefaultRS.NOZWRITE = 1;
|
|
DefaultRS.HIDECOLOR = 0;
|
|
DefaultRS.HIDEALPHA = 0;
|
|
if (QuadHideColor & 1) DefaultRS.HIDECOLOR = 1;
|
|
if (QuadHideColor & 2) DefaultRS.HIDEALPHA = 1;
|
|
|
|
Matrix(NULL);
|
|
Ortho();
|
|
|
|
if (SlotIndex >= NUMBER_OF_OGL_WORKING_REF ) SlotIndex = NUMBER_OF_OGL_WORKING_REF - 1;
|
|
|
|
float Coef = (float)AreaY/(float)AreaX;
|
|
|
|
switch (ulType)
|
|
{
|
|
case 0: // Save
|
|
if (Color)
|
|
{
|
|
DefaultRS.HIDECOLOR = 1;
|
|
SetRS(&DefaultRS,-1);
|
|
DrawQuad(0xffffffff,-1.0f, +1.0f * Coef,2.0f, -2.0f * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
DefaultRS.HIDECOLOR = 0;//*/ // TEST YOUSS
|
|
}
|
|
SetRS(&DefaultRS,-1);
|
|
ValidateLayer(SlotIndex);
|
|
CopyFrameBufferToTexture(ActivRect.left , ActivRect.top , ActivRect.left , ActivRect.top , ActivRect.right - ActivRect.left, ActivRect.bottom - ActivRect.top);
|
|
//YTEST glCopyTexSubImage2D(GL_TEXTURE_2D, 0 , ActivRect.left , ActivRect.top , ActivRect.left , ActivRect.top , ActivRect.right - ActivRect.left, ActivRect.bottom - ActivRect.top);
|
|
break;
|
|
case 1: // Blend
|
|
DefaultRS.BlendingMode = 1; // Alpha
|
|
SetRS(&DefaultRS,-1);
|
|
ValidateLayer(SlotIndex);
|
|
if (Factor1<0) Factor1 = 0;
|
|
if (Factor1>1.0f) Factor1 = 1.0f;
|
|
Factor1 = 1.0f - Factor1;
|
|
Color = (u32)(255.0f * Factor1)<<24;
|
|
Color |= 0xffffff;
|
|
DrawQuad(Color,-1.0f, +1.0f * Coef,2.0f, -2.0f * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
break;
|
|
case 5: // COPY
|
|
DefaultRS.BlendingMode = 0; // Copy
|
|
SetRS(&DefaultRS,-1);
|
|
ValidateLayer(SlotIndex);
|
|
DrawQuad(0xffffffff,-1.0f, +1.0f * Coef,2.0f, -2.0f * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
break;
|
|
case 2: // Screen
|
|
DefaultRS.BlendingMode = 2; // Add
|
|
SetRS(&DefaultRS,-1);
|
|
ValidateLayer(SlotIndex);
|
|
if (Factor1<0) Factor1 = 0;
|
|
if (Factor1>1.0f) Factor1 = 1.0f;
|
|
Color = 255.0f * Factor1;
|
|
Color |= Color << 8;
|
|
Color |= Color << 8;
|
|
DrawQuad(Color,-1.0f, +1.0f * Coef,2.0f, -2.0f * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
break;
|
|
case 3: // Multiply
|
|
DefaultRS.BlendingMode = 5; // Multiply
|
|
SetRS(&DefaultRS,-1);
|
|
ValidateLayer(SlotIndex);
|
|
if (Factor1<0) Factor1 = 0;
|
|
if (Factor1>1.0f) Factor1 = 1.0f;
|
|
DrawQuad(0xffffffff,-1.0f, +1.0f * Coef,2.0f, -2.0f * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
break;
|
|
case 4: // AlphaDest
|
|
DefaultRS.BlendingMode = 4; // PreviousAlpha
|
|
SetRS(&DefaultRS,-1);
|
|
ValidateLayer(SlotIndex);
|
|
if (Factor1<0) Factor1 = 0;
|
|
if (Factor1>1.0f) Factor1 = 1.0f;
|
|
DrawQuad(0xffffffff,-1.0f, +1.0f * Coef,2.0f, -2.0f * Coef,0.0f,0.0f,1.0f,1.0f);
|
|
break;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
PickingEnable = SavePicking;
|
|
|
|
RESTORE_MATRIXES();
|
|
STOP_RASTER(AE_Layer);
|
|
}
|
|
|