29 #include "../idlib/precompiled.h"
244 {
"nonsolid", 1, 0, 0 },
284 static const int numInfoParms =
sizeof(infoParms) /
sizeof (infoParms[0]);
296 for (
int i = 0 ;
i < numInfoParms ;
i++ ) {
297 if ( !token->
Icmp( infoParms[
i].
name ) ) {
304 if ( infoParms[i].clearSolid ) {
337 src.
Warning(
"missing sort parameter" );
342 if ( !token.
Icmp(
"subview" ) ) {
344 }
else if ( !token.
Icmp(
"opaque" ) ) {
346 }
else if ( !token.
Icmp(
"decal" ) ) {
348 }
else if ( !token.
Icmp(
"far" ) ) {
350 }
else if ( !token.
Icmp(
"medium" ) ) {
352 }
else if ( !token.
Icmp(
"close" ) ) {
354 }
else if ( !token.
Icmp(
"almostNearest" ) ) {
356 }
else if ( !token.
Icmp(
"nearest" ) ) {
358 }
else if ( !token.
Icmp(
"postProcess" ) ) {
360 }
else if ( !token.
Icmp(
"portalSky" ) ) {
363 sort = atof( token );
380 for (
int i = 0 ;
i < 4 ;
i++ ) {
399 if ( numRegisters == MAX_EXPRESSION_REGISTERS ) {
400 common->
Warning(
"GetExpressionConstant: material '%s' hit MAX_EXPRESSION_REGISTERS",
GetName() );
418 common->
Warning(
"GetExpressionTemporary: material '%s' hit MAX_EXPRESSION_REGISTERS",
GetName() );
433 if (
numOps == MAX_EXPRESSION_OPS ) {
498 return EmitOp( a, b, opType );
514 if ( token ==
"(" ) {
520 if ( !token.
Icmp(
"time" ) ) {
524 if ( !token.
Icmp(
"parm0" ) ) {
528 if ( !token.
Icmp(
"parm1" ) ) {
532 if ( !token.
Icmp(
"parm2" ) ) {
536 if ( !token.
Icmp(
"parm3" ) ) {
540 if ( !token.
Icmp(
"parm4" ) ) {
544 if ( !token.
Icmp(
"parm5" ) ) {
548 if ( !token.
Icmp(
"parm6" ) ) {
552 if ( !token.
Icmp(
"parm7" ) ) {
556 if ( !token.
Icmp(
"parm8" ) ) {
560 if ( !token.
Icmp(
"parm9" ) ) {
564 if ( !token.
Icmp(
"parm10" ) ) {
568 if ( !token.
Icmp(
"parm11" ) ) {
572 if ( !token.
Icmp(
"global0" ) ) {
576 if ( !token.
Icmp(
"global1" ) ) {
580 if ( !token.
Icmp(
"global2" ) ) {
584 if ( !token.
Icmp(
"global3" ) ) {
588 if ( !token.
Icmp(
"global4" ) ) {
592 if ( !token.
Icmp(
"global5" ) ) {
596 if ( !token.
Icmp(
"global6" ) ) {
600 if ( !token.
Icmp(
"global7" ) ) {
604 if ( !token.
Icmp(
"fragmentPrograms" ) ) {
608 if ( !token.
Icmp(
"sound" ) ) {
614 if ( token ==
"-" ) {
619 src.
Warning(
"Bad negative number '%s'", token.
c_str() );
624 if ( token.
type ==
TT_NUMBER || token ==
"." || token ==
"-" ) {
653 #define TOP_PRIORITY 4
658 if ( priority == 0 ) {
674 if ( priority == 1 && token ==
"*" ) {
677 if ( priority == 1 && token ==
"/" ) {
680 if ( priority == 1 && token ==
"%" ) {
683 if ( priority == 2 && token ==
"+" ) {
686 if ( priority == 2 && token ==
"-" ) {
689 if ( priority == 3 && token ==
">" ) {
692 if ( priority == 3 && token ==
">=" ) {
695 if ( priority == 3 && token ==
"<" ) {
698 if ( priority == 3 && token ==
"<=" ) {
701 if ( priority == 3 && token ==
"==" ) {
704 if ( priority == 3 && token ==
"!=" ) {
707 if ( priority == 4 && token ==
"&&" ) {
710 if ( priority == 4 && token ==
"||" ) {
754 if ( !name.
Icmp(
"GL_ONE" ) ) {
756 }
else if ( !name.
Icmp(
"GL_ZERO" ) ) {
758 }
else if ( !name.
Icmp(
"GL_DST_COLOR" ) ) {
760 }
else if ( !name.
Icmp(
"GL_ONE_MINUS_DST_COLOR" ) ) {
762 }
else if ( !name.
Icmp(
"GL_SRC_ALPHA" ) ) {
764 }
else if ( !name.
Icmp(
"GL_ONE_MINUS_SRC_ALPHA" ) ) {
766 }
else if ( !name.
Icmp(
"GL_DST_ALPHA" ) ) {
768 }
else if ( !name.
Icmp(
"GL_ONE_MINUS_DST_ALPHA" ) ) {
770 }
else if ( !name.
Icmp(
"GL_SRC_ALPHA_SATURATE" ) ) {
786 if ( !name.
Icmp(
"GL_ONE" ) ) {
788 }
else if ( !name.
Icmp(
"GL_ZERO" ) ) {
790 }
else if ( !name.
Icmp(
"GL_SRC_ALPHA" ) ) {
792 }
else if ( !name.
Icmp(
"GL_ONE_MINUS_SRC_ALPHA" ) ) {
794 }
else if ( !name.
Icmp(
"GL_DST_ALPHA" ) ) {
796 }
else if ( !name.
Icmp(
"GL_ONE_MINUS_DST_ALPHA" ) ) {
798 }
else if ( !name.
Icmp(
"GL_SRC_COLOR" ) ) {
800 }
else if ( !name.
Icmp(
"GL_ONE_MINUS_SRC_COLOR" ) ) {
817 int srcBlend, dstBlend;
824 if ( !token.
Icmp(
"blend" ) ) {
828 if ( !token.
Icmp(
"add" ) ) {
832 if ( !token.
Icmp(
"filter" ) || !token.
Icmp(
"modulate" ) ) {
836 if ( !token.
Icmp(
"none" ) ) {
841 if ( !token.
Icmp(
"bumpmap" ) ) {
845 if ( !token.
Icmp(
"diffusemap" ) ) {
849 if ( !token.
Icmp(
"specularmap" ) ) {
879 if ( !token.
IsNumeric() || parm < 0 || parm >= MAX_VERTEX_PARMS ) {
891 if ( !token[0] || token.
Icmp(
"," ) ) {
901 if ( !token[0] || token.
Icmp(
"," ) ) {
910 if ( !token[0] || token.
Icmp(
"," ) ) {
941 if ( !token.
IsNumeric() || unit < 0 || unit >= MAX_FRAGMENT_IMAGES ) {
959 if ( !token.
Icmp(
"cubeMap" ) ) {
963 if ( !token.
Icmp(
"cameraCubeMap" ) ) {
967 if ( !token.
Icmp(
"nearest" ) ) {
971 if ( !token.
Icmp(
"linear" ) ) {
975 if ( !token.
Icmp(
"clamp" ) ) {
979 if ( !token.
Icmp(
"noclamp" ) ) {
983 if ( !token.
Icmp(
"zeroclamp" ) ) {
987 if ( !token.
Icmp(
"alphazeroclamp" ) ) {
991 if ( !token.
Icmp(
"forceHighQuality" ) ) {
996 if ( !token.
Icmp(
"uncompressed" ) || !token.
Icmp(
"highquality" ) ) {
1002 if ( !token.
Icmp(
"nopicmip" ) ) {
1003 allowPicmip =
false;
1034 memcpy( old, ts->
matrix,
sizeof( old ) );
1107 memset( &newStage, 0,
sizeof( newStage ) );
1124 if ( token ==
"}" ) {
1129 if( !token.
Icmp(
"name") ) {
1135 if ( !token.
Icmp(
"blend" ) ) {
1140 if ( !token.
Icmp(
"map" ) ) {
1146 if ( !token.
Icmp(
"remoteRenderMap" ) ) {
1153 if ( !token.
Icmp(
"mirrorRenderMap" ) ) {
1161 if ( !token.
Icmp(
"xrayRenderMap" ) ) {
1168 if ( !token.
Icmp(
"screen" ) ) {
1172 if ( !token.
Icmp(
"screen2" ) ) {
1176 if ( !token.
Icmp(
"glassWarp" ) ) {
1181 if ( !token.
Icmp(
"videomap" ) ) {
1189 if ( !token.
Icmp(
"loop" ) ) {
1201 if ( !token.
Icmp(
"soundmap" ) ) {
1211 if ( !token.
Icmp(
"cubeMap" ) ) {
1218 if ( !token.
Icmp(
"cameraCubeMap" ) ) {
1225 if ( !token.
Icmp(
"ignoreAlphaTest" ) ) {
1229 if ( !token.
Icmp(
"nearest" ) ) {
1233 if ( !token.
Icmp(
"linear" ) ) {
1237 if ( !token.
Icmp(
"clamp" ) ) {
1241 if ( !token.
Icmp(
"noclamp" ) ) {
1245 if ( !token.
Icmp(
"zeroclamp" ) ) {
1249 if ( !token.
Icmp(
"alphazeroclamp" ) ) {
1253 if ( !token.
Icmp(
"uncompressed" ) || !token.
Icmp(
"highquality" ) ) {
1259 if ( !token.
Icmp(
"forceHighQuality" ) ) {
1263 if ( !token.
Icmp(
"nopicmip" ) ) {
1264 allowPicmip =
false;
1267 if ( !token.
Icmp(
"vertexColor" ) ) {
1271 if ( !token.
Icmp(
"inverseVertexColor" ) ) {
1277 else if ( !token.
Icmp(
"privatePolygonOffset" ) ) {
1289 if ( !token.
Icmp(
"texGen" ) ) {
1291 if ( !token.
Icmp(
"normal" ) ) {
1293 }
else if ( !token.
Icmp(
"reflect" ) ) {
1295 }
else if ( !token.
Icmp(
"skybox" ) ) {
1297 }
else if ( !token.
Icmp(
"wobbleSky" ) ) {
1308 if ( !token.
Icmp(
"scroll" ) || !token.
Icmp(
"translate" ) ) {
1322 if ( !token.
Icmp(
"scale" ) ) {
1337 if ( !token.
Icmp(
"centerScale" ) ) {
1352 if ( !token.
Icmp(
"shear" ) ) {
1367 if ( !token.
Icmp(
"rotate" ) ) {
1391 matrix[0][0] = cosReg;
1397 matrix[1][0] = sinReg;
1398 matrix[1][1] = cosReg;
1408 if ( !token.
Icmp(
"maskRed" ) ) {
1412 if ( !token.
Icmp(
"maskGreen" ) ) {
1416 if ( !token.
Icmp(
"maskBlue" ) ) {
1420 if ( !token.
Icmp(
"maskAlpha" ) ) {
1424 if ( !token.
Icmp(
"maskColor" ) ) {
1428 if ( !token.
Icmp(
"maskDepth" ) ) {
1432 if ( !token.
Icmp(
"alphaTest" ) ) {
1440 if ( !token.
Icmp(
"colored" ) ) {
1449 if ( !token.
Icmp(
"color" ) ) {
1459 if ( !token.
Icmp(
"red" ) ) {
1463 if ( !token.
Icmp(
"green" ) ) {
1467 if ( !token.
Icmp(
"blue" ) ) {
1471 if ( !token.
Icmp(
"alpha" ) ) {
1475 if ( !token.
Icmp(
"rgb" ) ) {
1480 if ( !token.
Icmp(
"rgba" ) ) {
1486 if ( !token.
Icmp(
"if" ) ) {
1490 if ( !token.
Icmp(
"program" ) ) {
1497 if ( !token.
Icmp(
"fragmentProgram" ) ) {
1503 if ( !token.
Icmp(
"vertexProgram" ) ) {
1509 if ( !token.
Icmp(
"megaTexture" ) ) {
1524 if ( !token.
Icmp(
"vertexParm" ) ) {
1529 if ( !token.
Icmp(
"fragmentMap" ) ) {
1568 if ( imageName[0] ) {
1591 if ( !token.
Icmp(
"sprite" ) ) {
1597 if ( !token.
Icmp(
"tube" ) ) {
1603 if ( !token.
Icmp(
"flare" ) ) {
1610 if ( !token.
Icmp(
"expand" ) ) {
1615 if ( !token.
Icmp(
"move" ) ) {
1620 if ( !token.
Icmp(
"turbulent" ) ) {
1624 src.
Warning(
"deform particle missing particle name" );
1635 if ( !token.
Icmp(
"eyeBall" ) ) {
1639 if ( !token.
Icmp(
"particle" ) ) {
1642 src.
Warning(
"deform particle missing particle name" );
1649 if ( !token.
Icmp(
"particle2" ) ) {
1652 src.
Warning(
"deform particle missing particle name" );
1682 bool hasDiffuse =
false;
1683 bool hasSpecular =
false;
1684 bool hasBump =
false;
1685 bool hasReflection =
false;
1698 hasReflection =
true;
1703 if ( !hasBump && !hasDiffuse && !hasSpecular ) {
1712 idStr::snPrintf( buffer,
sizeof( buffer ),
"blend bumpmap\nmap _flat\n}\n" );
1713 newSrc.
LoadMemory( buffer, strlen(buffer),
"bumpmap" );
1719 if ( !hasDiffuse && !hasSpecular && !hasReflection ) {
1720 idStr::snPrintf( buffer,
sizeof( buffer ),
"blend diffusemap\nmap _white\n}\n" );
1721 newSrc.
LoadMemory( buffer, strlen(buffer),
"diffusemap" );
1759 for (
int l = 1 ;
l < j-
i ;
l++ ) {
1760 for (
int k = i ; k < j-
l ; k++ ) {
1813 if ( token ==
"}" ) {
1816 else if ( !token.
Icmp(
"qer_editorimage") ) {
1823 else if ( !token.
Icmp(
"description") ) {
1835 else if ( !token.
Icmp(
"polygonOffset" ) ) {
1846 else if ( !token.
Icmp(
"noShadows" ) ) {
1850 else if ( !token.
Icmp(
"suppressInSubview" ) ) {
1854 else if ( !token.
Icmp(
"portalSky" ) ) {
1859 else if ( !token.
Icmp(
"noSelfShadow" ) ) {
1864 else if ( !token.
Icmp(
"noPortalFog" ) ) {
1869 else if ( !token.
Icmp(
"forceShadows" ) ) {
1874 else if ( !token.
Icmp(
"noOverlays" ) ) {
1879 else if ( !token.
Icmp(
"forceOverlays" ) ) {
1884 else if ( !token.
Icmp(
"translucent" ) ) {
1889 else if ( !token.
Icmp(
"zeroclamp" ) ) {
1894 else if ( !token.
Icmp(
"clamp" ) ) {
1899 else if ( !token.
Icmp(
"alphazeroclamp" ) ) {
1904 else if ( !token.
Icmp(
"forceOpaque" ) ) {
1909 else if ( !token.
Icmp(
"twoSided" ) ) {
1918 else if ( !token.
Icmp(
"backSided" ) ) {
1925 else if ( !token.
Icmp(
"fogLight" ) ) {
1930 else if ( !token.
Icmp(
"blendLight" ) ) {
1935 else if ( !token.
Icmp(
"ambientLight" ) ) {
1940 else if ( !token.
Icmp(
"mirror" ) ) {
1946 else if ( !token.
Icmp(
"noFog" ) ) {
1951 else if ( !token.
Icmp(
"unsmoothedTangents" ) ) {
1958 else if ( !token.
Icmp(
"lightFalloffImage" ) ) {
1969 else if ( !token.
Icmp(
"guisurf" ) ) {
1971 if ( !token.
Icmp(
"entity" ) ) {
1973 }
else if ( !token.
Icmp(
"entity2" ) ) {
1975 }
else if ( !token.
Icmp(
"entity3" ) ) {
1983 else if ( !token.
Icmp(
"sort" ) ) {
1988 else if ( !token.
Icmp(
"spectrum" ) ) {
1994 else if ( !token.
Icmp(
"deform" ) ) {
1999 else if ( !token.
Icmp(
"decalInfo" ) ) {
2004 else if ( !token.
Icmp(
"renderbump") ) {
2009 else if ( !token.
Icmp(
"diffusemap" ) ) {
2011 idStr::snPrintf( buffer,
sizeof( buffer ),
"blend diffusemap\nmap %s\n}\n", str );
2012 newSrc.
LoadMemory( buffer, strlen(buffer),
"diffusemap" );
2019 else if ( !token.
Icmp(
"specularmap" ) ) {
2021 idStr::snPrintf( buffer,
sizeof( buffer ),
"blend specularmap\nmap %s\n}\n", str );
2022 newSrc.
LoadMemory( buffer, strlen(buffer),
"specularmap" );
2029 else if ( !token.
Icmp(
"bumpmap" ) ) {
2031 idStr::snPrintf( buffer,
sizeof( buffer ),
"blend bumpmap\nmap %s\n}\n", str );
2032 newSrc.
LoadMemory( buffer, strlen(buffer),
"bumpmap" );
2039 else if ( !token.
Icmp(
"DECAL_MACRO" ) ) {
2055 else if ( token ==
"{" ) {
2134 memset( &parsingData, 0,
sizeof( parsingData ) );
2352 for ( i = 0 ; i <
numOps ; i++ ) {
2431 for ( i = 0 ; i <
numOps ; i++, op++ ) {
2434 registers[op->
c] = registers[op->
a] + registers[op->
b];
2437 registers[op->
c] = registers[op->
a] - registers[op->
b];
2440 registers[op->
c] = registers[op->
a] * registers[op->
b];
2443 registers[op->
c] = registers[op->
a] / registers[op->
b];
2446 b = (
int)registers[op->
b];
2448 registers[op->
c] = (
int)registers[op->
a] %
b;
2457 if ( soundEmitter ) {
2460 registers[op->
c] = 0;
2464 registers[op->
c] = registers[ op->
a ] > registers[op->
b];
2467 registers[op->
c] = registers[ op->
a ] >= registers[op->
b];
2470 registers[op->
c] = registers[ op->
a ] < registers[op->
b];
2473 registers[op->
c] = registers[ op->
a ] <= registers[op->
b];
2476 registers[op->
c] = registers[ op->
a ] == registers[op->
b];
2479 registers[op->
c] = registers[ op->
a ] != registers[op->
b];
2482 registers[op->
c] = registers[ op->
a ] && registers[op->
b];
2485 registers[op->
c] = registers[ op->
a ] || registers[op->
b];
2604 static int c_constant, c_variable;
2614 memset( shaderParms, 0,
sizeof( shaderParms ) );
2616 memset( &viewDef, 0,
sizeof( viewDef ) );
2670 char generated[2048];
2672 "material %s // IMPLICITLY GENERATED\n"
2697 "\t\t" "blend\tblend\n"
2698 "\t\t" "map\t\t_default\n"
2728 if (
stages[
i].newStage->fragmentProgramImages[
j] ) {
int GetLineNum(void) const
const int GLS_DSTBLEND_ONE
void ParseStage(idLexer &src, const textureRepeat_t trpDefault=TR_REPEAT)
idImage * GetEditorImage(void) const
int EmitOp(int a, int b, expOpType_t opType)
float shaderRegisters[MAX_EXPRESSION_REGISTERS]
static int snPrintf(char *dest, int size, const char *fmt,...) id_attribute((format(printf
const int GLS_SRCBLEND_ONE_MINUS_DST_ALPHA
const int GLS_DEPTHFUNC_LESS
bool ReplaceSourceFileText(void)
assert(prefInfo.fullscreenBtn)
idCVarSystem * cvarSystem
int GetExpressionTemporary(void)
const int GLS_DSTBLEND_ONE_MINUS_DST_ALPHA
void ParseDeform(idLexer &src)
int ParseEmitOp(idLexer &src, int a, expOpType_t opType, int priority)
const char * GetFileName(void) const
const int DECL_LEXER_FLAGS
const int GLS_DSTBLEND_DST_ALPHA
const int GLS_SRCBLEND_SRC_ALPHA
virtual bool SetDefaultText(void)
const int GLS_SRCBLEND_ONE_MINUS_DST_COLOR
void ParseDecalInfo(idLexer &src)
materialCoverage_t coverage
virtual int AnimationLength()
void ResetCinematicTime(int time) const
struct mtrParsingData_s * pd
const int GLS_SRCBLEND_ALPHA_SATURATE
const int GLS_DSTBLEND_SRC_COLOR
const float * ConstantRegisters() const
void ParseMaterial(idLexer &src)
void ClearStage(shaderStage_t *ss)
void UpdateCinematic(int time) const
int Parse1DMatrix(int x, float *m)
virtual int GetCVarInteger(const char *name) const =0
idImage * fragmentProgramImages[MAX_FRAGMENT_IMAGES]
const int GLS_DSTBLEND_SRC_ALPHA
GLenum GLsizei GLenum GLenum const GLvoid * table
float GetFloatValue(void)
const shaderStage_t * GetBumpStage(void) const
const char * GetName(void) const
GLenum GLsizei GLenum GLenum const GLvoid * image
static idCinematic * Alloc()
virtual void Print(void) const
idImage * currentRenderImage
virtual bool Parse(const char *text, const int textLength)
int GetImageHeight(void) const
int ParseExpression(idLexer &src)
virtual void ResetTime(int time)
void CheckForConstantRegisters()
void SetClassification(int tag)
void ReloadImages(bool force) const
float ParseFloat(bool *errorFlag=NULL)
bool Save(const char *fileName=NULL)
int ReadTokenOnLine(idToken *token)
idUserInterfaceManager * uiManager
void ParseFragmentMap(idLexer &src, newShaderStage_t *newStage)
shaderStage_t parseStages[MAX_SHADER_STAGES]
void EvaluateRegisters(float *regs, const float entityParms[MAX_ENTITY_SHADER_PARMS], const struct viewDef_s *view, idSoundEmitter *soundEmitter=NULL) const
const idDecl * deformDecl
int Icmp(const char *text) const
virtual bool InitFromFile(const char *qpath, bool looping)
const int MAX_ENTITY_SHADER_PARMS
bool registerIsTemporary[MAX_EXPRESSION_REGISTERS]
idImage * lightFalloffImage
virtual idUserInterface * FindGui(const char *qpath, bool autoLoad=false, bool needUnique=false, bool forceUnique=false)=0
int ExpectAnyToken(idToken *token)
int GetExpressionConstant(float f)
const int GLS_DEPTHFUNC_EQUAL
void MultiplyTextureMatrix(textureStage_t *ts, int registers[2][3])
int numFragmentProgramImages
materialCoverage_t Coverage(void) const
const char * R_ParsePastImageProgram(idLexer &src)
const int GLS_SRCBLEND_BITS
float * constantRegisters
int ParseTerm(idLexer &src)
void ParseBlend(idLexer &src, shaderStage_t *stage)
int ParseExpressionPriority(idLexer &src, int priority)
void SetMaterialFlag(const int flag) const
const shaderStage_t * GetStage(const int index) const
newShaderStage_t * newStage
virtual const char * ImageName(void) const
bool shouldCreateBackSides
idCVar r_useConstantMaterials("r_useConstantMaterials","1", CVAR_RENDERER|CVAR_BOOL,"use pre-calculated material registers if possible")
virtual const char * DefaultDefinition(void) const
const int MAX_SHADER_STAGES
virtual const idDecl * FindType(declType_t type, const char *name, bool makeDefault=true)=0
const int GLS_DSTBLEND_ONE_MINUS_SRC_COLOR
int GetInteger(void) const
float privatePolygonOffset
const int GLS_SRCBLEND_ONE
bool CheckSurfaceParm(idToken *token)
idImageManager * globalImages
virtual void virtual void FatalError(const char *fmt,...) id_attribute((format(printf
int vertexParms[MAX_VERTEX_PARMS][4]
static void Copynz(char *dest, const char *src, int destsize)
const int GetSurfaceFlags(void) const
bool registersAreConstant
expOp_t * GetExpressionOp(void)
int texGenRegisters[MAX_TEXGEN_REGISTERS]
float shaderParms[MAX_GLOBAL_SHADER_PARMS]
virtual size_t Size(void) const
void UnreadToken(const idToken *token)
int NameToDstBlendMode(const idStr &name)
GLubyte GLubyte GLubyte a
virtual void Printf(const char *fmt,...) id_attribute((format(printf
int CinematicLength(void) const
int LoadMemory(const char *ptr, int length, const char *name, int startLine=1)
const int GLS_SRCBLEND_DST_ALPHA
void SetText(const char *text)
void AddImplicitStages(const textureRepeat_t trpDefault=TR_REPEAT)
const int GLS_DSTBLEND_ZERO
idDeclManager * declManager
idImage * ImageFromFile(const char *name, textureFilter_t filter, bool allowDownSize, textureRepeat_t repeat, textureDepth_t depth, cubeFiles_t cubeMap=CF_2D)
bool IsNumeric(void) const
int ExpectTokenString(const char *string)
void void Warning(const char *str,...) id_attribute((format(printf
const int GLS_DSTBLEND_ONE_MINUS_SRC_ALPHA
const int GetNumRegisters() const
idMegaTexture * megaTexture
virtual const idDecl * DeclByIndex(declType_t type, int index, bool forceParse=true)=0
void * R_ClearedStaticAlloc(int bytes)
int NameToSrcBlendMode(const idStr &name)
void * R_StaticAlloc(int bytes)
virtual void FreeData(void)
float * expressionRegisters
static idCVar image_ignoreHighQuality
#define GL_VERTEX_PROGRAM_ARB
const int GLS_SRCBLEND_ZERO
int GetImageWidth(void) const
void Reload(bool checkPrecompressed, bool force)
void ParseVertexParm(idLexer &src, newShaderStage_t *newStage)
struct mtrParsingData_s mtrParsingData_t
stageVertexColor_t vertexColor
void SetGui(const char *_gui) const
const char * c_str(void) const
int SkipUntilString(const char *string)
bool TestMaterialFlag(const int flag) const
const int GLS_SRCBLEND_DST_COLOR
void SetImageClassifications(int tag) const
void * Mem_Alloc(const int size)
bool MatchToken(idLexer &src, const char *match)
bool InitFromMegaFile(const char *fileBase)
virtual cinData_t ImageForTime(int milliseconds)
void R_StaticFree(void *data)
const char * ParseRestOfLine(idStr &out)
bool ARBFragmentProgramAvailable
void CloseCinematic(void) const
virtual void virtual void Warning(const char *fmt,...) id_attribute((format(printf
void SortInteractionStages()
int R_FindARBProgram(GLenum target, const char *program)
int ReadToken(idToken *token)
const int GLS_DSTBLEND_BITS
renderView_t primaryRenderView
const int GLS_SRCBLEND_ONE_MINUS_SRC_ALPHA
expOp_t shaderOps[MAX_EXPRESSION_OPS]
#define GL_FRAGMENT_PROGRAM_ARB
virtual float CurrentAmplitude(void)=0
float TableLookup(float index) const
const viewDef_t * viewDef
void ParseSort(idLexer &src)