This commit is contained in:
OM 2023-05-27 15:36:19 +02:00
parent f3be59f64d
commit 3d223f5a5d
21 changed files with 395 additions and 122 deletions

View file

@ -237,9 +237,11 @@ if (WITH_CLIENT)
file(GLOB_RECURSE SOURCES_CLIENT "code/client/*.c" "code/client/*.cpp" "code/qcommon/puff.c")
file(GLOB_RECURSE SOURCES_UILIB "code/uilib/*.c" "code/uilib/*.cpp")
include("code/renderergl2/glsl/shaders.cmake")
#file(GLOB_RECURSE SOURCES_RENDERER "code/sdl/*.c" "code/renderer/*.c" "code/renderer/*.cpp")
file(GLOB_RECURSE SOURCES_RENDERER "code/sdl/*.c" "code/renderercommon/*.c" "code/renderergl2/*.c" "code/renderergl2/*.cpp")
set(SOURCES_CLIENT_APP ${SOURCES_APP} ${SOURCES_SERVER} ${SOURCES_CLIENT} ${SOURCES_UILIB} ${SOURCES_LIBS} ${SOURCES_RENDERER})
list(FILTER SOURCES_RENDERER EXCLUDE REGEX "(.*)/tr_subs.c")
set(SOURCES_CLIENT_APP ${SOURCES_APP} ${SOURCES_SERVER} ${SOURCES_CLIENT} ${SOURCES_UILIB} ${SOURCES_LIBS} ${SOURCES_RENDERER} ${SHADER_SRCS})
add_executable(openmohaa ${SOURCES_PLATFORM_SPECIFIC} ${SOURCES_CLIENT_APP} ${SOURCES_CLIENT_PLATFORM_SPECIFIC})
target_compile_definitions(openmohaa PRIVATE NO_SCRIPTENGINE APP_MODULE TARGET_GAME_TYPE=${TARGET_GAME_TYPE})
@ -268,11 +270,6 @@ if (WITH_CLIENT)
set_target_properties(sdl2main PROPERTIES
IMPORTED_IMPLIB "${CMAKE_SOURCE_DIR}/code/libs/win64/SDL264main.lib"
)
add_library(glew32 SHARED IMPORTED)
set_target_properties(glew32 PROPERTIES
IMPORTED_IMPLIB "${CMAKE_SOURCE_DIR}/code/libs/win64/glew32.lib"
)
else()
add_library(sdl2 SHARED IMPORTED)
set_target_properties(sdl2 PROPERTIES
@ -283,14 +280,9 @@ if (WITH_CLIENT)
set_target_properties(sdl2main PROPERTIES
IMPORTED_IMPLIB "${CMAKE_SOURCE_DIR}/code/libs/win32/SDL2main.lib"
)
add_library(glew32 SHARED IMPORTED)
set_target_properties(glew32 PROPERTIES
IMPORTED_IMPLIB "${CMAKE_SOURCE_DIR}/code/libs/win32/glew32.lib"
)
endif()
target_link_libraries(openmohaa PRIVATE opengl32 sdl2 sdl2main glew32)
target_link_libraries(openmohaa PRIVATE sdl2 sdl2main)
endif()
target_link_libraries(openmohaa PRIVATE wsock32 ws2_32)

View file

@ -131,12 +131,12 @@ typedef struct
char * (*Args)( void ); // concatenation of all argv >= 1
void (*AddCommand)( const char *cmd );
void (*Cmd_Stuff)(const char* text);
void (*Cmd_Execute)(cbufExec_t execWhen, const char* text);
void (*Cmd_Execute)(int execWhen, const char* text);
void (*Cmd_TokenizeString)(const char* textIn);
// a -1 return means the file does not exist
// NULL can be passed for buf to just determine existance
int (*FS_ReadFile)( const char *name, void **buf, qboolean quiet );
long (*FS_ReadFile)( const char *name, void **buf, qboolean quiet );
void (*FS_FreeFile)( void *buf );
int (*FS_WriteFile)( const char *qpath, const void *buffer, int size );
void (*FS_WriteTextFile)( const char *qpath, const void *buffer, int size );

View file

@ -23,9 +23,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
// DESCRIPTION:
// Renderer types
#ifndef __TR_TYPES_H
#define __TR_TYPES_H
#pragma once
#define MAX_DLIGHTS 32 // can't be increased, because bit flags are used on surfaces
#define MAX_ENTITIES 1023 // can't be increased without changing drawsurf bit packing
@ -271,6 +269,3 @@ typedef struct {
#define OPENGL_DRIVER_NAME "opengl32"
#endif // !defined _WIN32
#endif // __TR_TYPES_H

View file

@ -480,8 +480,8 @@ void CL_ShutdownCGame( void ) {
Sys_UnloadCGame();
if( re.FreeModels ) {
re.FreeModels();
if( re.newre.FreeModels ) {
re.newre.FreeModels();
}
Z_FreeTags( TAG_CGAME );
@ -586,12 +586,12 @@ void CL_InitCGameDLL( clientGameImport_t *cgi, clientGameExport_t **cge ) {
cgi->CM_PointLeafnum = CM_PointLeafnum;
cgi->CM_LeafInPVS = CM_LeafInPVS;
cgi->R_MarkFragments = re.MarkFragments;
cgi->R_MarkFragmentsForInlineModel = re.MarkFragmentsForInlineModel;
cgi->R_GetInlineModelBounds = re.GetInlineModelBounds;
cgi->R_GetLightingForDecal = re.GetLightingForDecal;
cgi->R_GetLightingForSmoke = re.GetLightingForSmoke;
cgi->R_GatherLightSources = re.R_GatherLightSources;
cgi->R_MarkFragments = re.newre.MarkFragments;
cgi->R_MarkFragmentsForInlineModel = re.newre.MarkFragmentsForInlineModel;
cgi->R_GetInlineModelBounds = re.newre.GetInlineModelBounds;
cgi->R_GetLightingForDecal = re.newre.GetLightingForDecal;
cgi->R_GetLightingForSmoke = re.newre.GetLightingForSmoke;
cgi->R_GatherLightSources = re.newre.R_GatherLightSources;
cgi->S_StartSound = S_StartSound;
cgi->S_StartLocalSound = CL_StartLocalSound;
@ -620,39 +620,39 @@ void CL_InitCGameDLL( clientGameImport_t *cgi, clientGameExport_t **cge ) {
cgi->R_RenderScene = re.RenderScene;
cgi->R_LoadWorldMap = re.LoadWorld;
cgi->R_PrintBSPFileSizes = re.PrintBSPFileSizes;
cgi->R_MapVersion = re.MapVersion;
cgi->R_PrintBSPFileSizes = re.newre.PrintBSPFileSizes;
cgi->R_MapVersion = re.newre.MapVersion;
cgi->R_RegisterModel = re.RegisterModel;
cgi->R_SpawnEffectModel = re.SpawnEffectModel;
cgi->R_RegisterServerModel = re.RegisterServerModel;
cgi->R_UnregisterServerModel = re.UnregisterServerModel;
cgi->R_SpawnEffectModel = re.newre.SpawnEffectModel;
cgi->R_RegisterServerModel = re.newre.RegisterServerModel;
cgi->R_UnregisterServerModel = re.newre.UnregisterServerModel;
cgi->R_RegisterShader = re.RegisterShader;
cgi->R_RegisterShaderNoMip = re.RegisterShaderNoMip;
cgi->R_AddRefEntityToScene = re.AddRefEntityToScene;
cgi->R_AddRefSpriteToScene = re.AddRefSpriteToScene;
cgi->R_AddRefEntityToScene = re.newre.AddRefEntityToScene;
cgi->R_AddRefSpriteToScene = re.newre.AddRefSpriteToScene;
cgi->R_AddLightToScene = re.AddLightToScene;
cgi->R_AddPolyToScene = re.AddPolyToScene;
cgi->R_AddTerrainMarkToScene = re.AddTerrainMarkToScene;
cgi->R_AddLightToScene = re.newre.AddLightToScene;
cgi->R_AddPolyToScene = re.newre.AddPolyToScene;
cgi->R_AddTerrainMarkToScene = re.newre.AddTerrainMarkToScene;
cgi->R_SetColor = re.SetColor;
cgi->R_DrawStretchPic = re.DrawStretchPic;
cgi->R_LoadFont = re.LoadFont;
cgi->R_DrawString = re.DrawString;
cgi->R_ModelBounds = re.ModelBounds;
cgi->R_ModelRadius = re.ModelRadius;
cgi->R_GetRenderEntity = re.GetRenderEntity;
cgi->R_Noise = re.Noise;
cgi->R_DebugLine = re.DebugLine;
cgi->R_LoadFont = re.newre.LoadFont;
cgi->R_DrawString = re.newre.DrawString;
cgi->R_ModelBounds = re.newre.ModelBounds;
cgi->R_ModelRadius = re.newre.ModelRadius;
cgi->R_GetRenderEntity = re.newre.GetRenderEntity;
cgi->R_Noise = re.newre.Noise;
cgi->R_DebugLine = re.newre.DebugLine;
cgi->GetShader = CL_GetShaderPointer;
cgi->R_GetShaderWidth = re.GetShaderWidth;
cgi->R_GetShaderHeight = re.GetShaderHeight;
cgi->R_GetShaderWidth = re.newre.GetShaderWidth;
cgi->R_GetShaderHeight = re.newre.GetShaderHeight;
cgi->R_DrawBox = re.DrawBox;
cgi->R_SwipeBegin = re.SwipeBegin;
cgi->R_SwipePoint = re.SwipePoint;
cgi->R_SwipeEnd = re.SwipeEnd;
cgi->R_DrawBox = re.newre.DrawBox;
cgi->R_SwipeBegin = re.newre.SwipeBegin;
cgi->R_SwipePoint = re.newre.SwipePoint;
cgi->R_SwipeEnd = re.newre.SwipeEnd;
cgi->GetGameState = CL_GetGameState;
cgi->GetSnapshot = CL_GetSnapshot;
@ -684,7 +684,7 @@ void CL_InitCGameDLL( clientGameImport_t *cgi, clientGameExport_t **cge ) {
cgi->Key_KeynumToBindString = Key_KeynumToBindString;
cgi->Key_GetKeysForCommand = Key_GetKeysForCommand;
cgi->R_Model_GetHandle = re.R_Model_GetHandle;
cgi->R_Model_GetHandle = re.newre.R_Model_GetHandle;
cgi->TIKI_NumAnims = TIKI_NumAnims;
cgi->TIKI_CalculateBounds = TIKI_CalculateBounds;
@ -709,9 +709,9 @@ void CL_InitCGameDLL( clientGameImport_t *cgi, clientGameExport_t **cge ) {
cgi->Tag_NumForName = TIKI_Tag_NameToNum;
cgi->Tag_NameForNum = TIKI_Tag_NumToName;
cgi->ForceUpdatePose = re.ForceUpdatePose;
cgi->TIKI_Orientation = re.TIKI_Orientation;
cgi->TIKI_IsOnGround = re.TIKI_IsOnGround;
cgi->ForceUpdatePose = re.newre.ForceUpdatePose;
cgi->TIKI_Orientation = re.newre.TIKI_Orientation;
cgi->TIKI_IsOnGround = re.newre.TIKI_IsOnGround;
cgi->UI_ShowScoreBoard = UI_ShowScoreboard_f;
cgi->UI_HideScoreBoard = UI_HideScoreboard_f;

View file

@ -1583,13 +1583,13 @@ void CIN_DrawCinematic (int handle) {
CIN_ResampleCinematic(handle, buf2);
re.DrawStretchRaw( x, y, w, h, 256, 256, 0, (byte *)buf2);
re.DrawStretchRaw( x, y, w, h, 256, 256, (byte *)buf2, 0, qfalse);
cinTable[handle].dirty = qfalse;
Hunk_FreeTempMemory(buf2);
return;
}
re.DrawStretchRaw( x, y, w, h, cinTable[handle].drawX, cinTable[handle].drawY, 0, buf);
re.DrawStretchRaw( x, y, w, h, cinTable[handle].drawX, cinTable[handle].drawY, buf, 0, qfalse);
cinTable[handle].dirty = qfalse;
}

View file

@ -2329,7 +2329,7 @@ void CL_CheckUserinfo( void ) {
}
void CL_SetFrameNumber(int frameNumber) {
re.SetFrameNumber(frameNumber);
re.newre.SetFrameNumber(frameNumber);
}
/*
@ -2576,7 +2576,7 @@ void CL_StartHunkUsers( void ) {
CL_RefMalloc
============
*/
void *CL_RefMalloc(size_t size) {
void *CL_RefMalloc(int size) {
return Z_TagMalloc( size, TAG_RENDERER );
}
@ -2606,7 +2606,7 @@ void* CL_RefStaticMallocDebug(size_t size, const char* label, const char* file,
CL_RefStaticMalloc
============
*/
void *CL_RefStaticMalloc(size_t size ) {
void *CL_RefStaticMalloc(int size, ha_pref preference ) {
void *ptr = Z_TagMalloc( size, TAG_STATIC_RENDERER );
Com_Memset( ptr, 0, size );
return ptr;
@ -2617,7 +2617,7 @@ void *CL_RefStaticMalloc(size_t size ) {
CL_RefStaticMallocTemp
============
*/
void* CL_RefStaticMallocTemp(size_t size) {
void* CL_RefStaticMallocTemp(int size) {
return Hunk_AllocateTempMemory(size);
}
@ -2703,6 +2703,14 @@ int CL_ScaledMilliseconds(void) {
return Sys_Milliseconds()*com_timescale->value;
}
void CL_RefFS_WriteFile(const char* qpath, const void* buffer, int size) {
FS_WriteFile(qpath, buffer, size);
}
char** CL_RefFS_ListFiles(const char* name, const char* extension, int* numfilesfound) {
return FS_ListFiles(path, extension, qtrue, numfilesfound);
}
/*
============
CL_InitRef
@ -2727,8 +2735,8 @@ void CL_InitRef( void ) {
ri.Milliseconds = CL_ScaledMilliseconds;
ri.Malloc = CL_RefMalloc;
ri.Free = Z_Free;
ri.Clear = CL_RefClear;
ri.Hunk_Clear = CL_RefStaticClear;
ri.newri.Clear = CL_RefClear;
ri.newri.Hunk_Clear = CL_RefStaticClear;
#ifdef HUNK_DEBUG
ri.Hunk_AllocDebug = CL_RefStaticMallocDebug;
#else
@ -2738,45 +2746,45 @@ void CL_InitRef( void ) {
ri.Hunk_FreeTempMemory = Hunk_FreeTempMemory;
ri.CM_DrawDebugSurface = CM_DrawDebugSurface;
ri.FS_OpenFile = FS_FOpenFileRead;
ri.FS_CloseFile = FS_FCloseFile;
ri.FS_Read = FS_Read;
ri.FS_Seek = FS_Seek;
ri.newri.FS_OpenFile = FS_FOpenFileRead;
ri.newri.FS_CloseFile = FS_FCloseFile;
ri.newri.FS_Read = FS_Read;
ri.newri.FS_Seek = FS_Seek;
ri.FS_ReadFile = FS_ReadFile;
ri.FS_ReadFileEx = FS_ReadFileEx;
ri.newri.FS_ReadFileEx = FS_ReadFileEx;
ri.FS_FreeFile = FS_FreeFile;
ri.FS_WriteFile = FS_WriteFile;
ri.FS_WriteFile = CL_RefFS_WriteFile;
ri.FS_FreeFileList = FS_FreeFileList;
ri.FS_ListFiles = FS_ListFiles;
ri.FS_ListFiles = CL_RefFS_ListFiles;
ri.FS_FileIsInPAK = FS_FileIsInPAK;
ri.FS_FileExists = FS_FileExists;
ri.Cvar_Get = Cvar_Get;
ri.Cvar_Set = Cvar_Set;
ri.Cvar_SetDefault = Cvar_SetDefault;
ri.newri.Cvar_SetDefault = Cvar_SetDefault;
ri.CM_EntityString = CM_EntityString;
ri.CM_MapTime = CM_MapTime;
ri.CM_BoxTrace = CM_BoxTrace;
ri.CG_PermanentMark = CL_CG_PermanentMark;
ri.CG_PermanentTreadMarkDecal = CL_CG_PermanentTreadMarkDecal;
ri.CG_PermanentUpdateTreadMark = CL_CG_PermanentUpdateTreadMark;
ri.CM_TerrainSquareType = CM_TerrainSquareType;
ri.CG_ProcessInitCommands = CL_CG_ProcessInitCommands;
ri.CG_EndTiki = CL_CG_EndTiki;
ri.SetPerformanceCounters = CL_RefSetPerformanceCounters;
ri.newri.CM_EntityString = CM_EntityString;
ri.newri.CM_MapTime = CM_MapTime;
ri.newri.CM_BoxTrace = CM_BoxTrace;
ri.newri.CG_PermanentMark = CL_CG_PermanentMark;
ri.newri.CG_PermanentTreadMarkDecal = CL_CG_PermanentTreadMarkDecal;
ri.newri.CG_PermanentUpdateTreadMark = CL_CG_PermanentUpdateTreadMark;
ri.newri.CM_TerrainSquareType = CM_TerrainSquareType;
ri.newri.CG_ProcessInitCommands = CL_CG_ProcessInitCommands;
ri.newri.CG_EndTiki = CL_CG_EndTiki;
ri.newri.SetPerformanceCounters = CL_RefSetPerformanceCounters;
ri.DebugLines = &DebugLines;
ri.numDebugLines = &numDebugLines;
ri.DebugStrings = &DebugStrings;
ri.numDebugStrings = &numDebugStrings;
ri.newri.DebugLines = &DebugLines;
ri.newri.numDebugLines = &numDebugLines;
ri.newri.DebugStrings = &DebugStrings;
ri.newri.numDebugStrings = &numDebugStrings;
ri.TIKI_OrientationInternal = TIKI_OrientationInternal;
ri.TIKI_IsOnGroundInternal = TIKI_IsOnGroundInternal;
ri.TIKI_SetPoseInternal = TIKI_SetPoseInternal;
ri.TIKI_Alloc = TIKI_Alloc;
ri.GetRadiusInternal = TIKI_GetRadiusInternal;
ri.GetCentroidRadiusInternal = TIKI_GetCentroidRadiusInternal;
ri.GetFrameInternal = TIKI_GetFrameInternal;
ri.newri.TIKI_OrientationInternal = TIKI_OrientationInternal;
ri.newri.TIKI_IsOnGroundInternal = TIKI_IsOnGroundInternal;
ri.newri.TIKI_SetPoseInternal = TIKI_SetPoseInternal;
ri.newri.TIKI_Alloc = TIKI_Alloc;
ri.newri.GetRadiusInternal = TIKI_GetRadiusInternal;
ri.newri.GetCentroidRadiusInternal = TIKI_GetCentroidRadiusInternal;
ri.newri.GetFrameInternal = TIKI_GetFrameInternal;
#ifdef USE_RENDERER_DLL
// su44: load renderer dll

View file

@ -439,7 +439,7 @@ void SCR_DrawScreenField( void ) {
if ( cls.glconfig.vidWidth * 480 > cls.glconfig.vidHeight * 640 ) {
re.SetColor( g_color_table[0] );
//re.DrawStretchPic( 0, 0, cls.glconfig.vidWidth, cls.glconfig.vidHeight, 0, 0, 0, 0, cls.whiteShader );
re.DrawBox( 0, 0, cls.glconfig.vidHeight, cls.glconfig.vidWidth );
re.newre.DrawBox( 0, 0, cls.glconfig.vidHeight, cls.glconfig.vidWidth );
re.SetColor( NULL );
}
}

View file

@ -1637,10 +1637,10 @@ UI_ClearBackground
====================
*/
void UI_ClearBackground( void ) {
re.Set2DWindow( 0, 0, cls.glconfig.vidWidth, cls.glconfig.vidHeight, 0, cls.glconfig.vidWidth, cls.glconfig.vidHeight, 0, -1, -1 );
re.Scissor( 0, 0, cls.glconfig.vidWidth, cls.glconfig.vidHeight );
re.newre.Set2DWindow( 0, 0, cls.glconfig.vidWidth, cls.glconfig.vidHeight, 0, cls.glconfig.vidWidth, cls.glconfig.vidHeight, 0, -1, -1 );
re.newre.Scissor( 0, 0, cls.glconfig.vidWidth, cls.glconfig.vidHeight );
re.SetColor( g_color_table[ 0 ] );
re.DrawBox( 0, 0, cls.glconfig.vidWidth, cls.glconfig.vidHeight );
re.newre.DrawBox( 0, 0, cls.glconfig.vidWidth, cls.glconfig.vidHeight );
re.SetColor( NULL );
}
@ -1712,7 +1712,7 @@ void UI_Update(void) {
Menu* currentMenu;
UIRect2D frame;
re.SetRenderTime(cls.realtime);
re.newre.SetRenderTime(cls.realtime);
CL_FillUIDef();
uWinMan.ServiceEvents();
@ -3704,17 +3704,17 @@ CL_FillUIImports
====================
*/
void CL_FillUIImports( void ) {
uii.Rend_DrawBox = re.DrawBox;
uii.Rend_DrawBox = re.newre.DrawBox;
uii.Rend_DrawPicStretched = re.DrawStretchPic;
uii.Rend_DrawPicTiled = re.DrawTilePic;
uii.Rend_GetShaderHeight = re.GetShaderHeight;
uii.Rend_GetShaderWidth = re.GetShaderWidth;
uii.Rend_DrawString = re.DrawString;
uii.Rend_LoadFont = re.LoadFont;
uii.Rend_DrawPicTiled = re.newre.DrawTilePic;
uii.Rend_GetShaderHeight = re.newre.GetShaderHeight;
uii.Rend_GetShaderWidth = re.newre.GetShaderWidth;
uii.Rend_DrawString = re.newre.DrawString;
uii.Rend_LoadFont = re.newre.LoadFont;
uii.Rend_RegisterMaterial = re.RegisterShaderNoMip;
uii.Rend_RefreshMaterial = re.RefreshShaderNoMip;
uii.Rend_Scissor = re.Scissor;
uii.Rend_Set2D = re.Set2DWindow;
uii.Rend_RefreshMaterial = re.newre.RefreshShaderNoMip;
uii.Rend_Scissor = re.newre.Scissor;
uii.Rend_Set2D = re.newre.Set2DWindow;
uii.Rend_SetColor = re.SetColor;
uii.Cmd_Stuff = Cbuf_AddText;

View file

@ -491,13 +491,13 @@ void UIFakkLabel::DrawStatbar( float frac )
float width = frac * m_frame.size.width;
m_statbar_material->ReregisterMaterial();
re.DrawTilePic(0.0, 0.0, width, m_frame.size.height, m_statbar_material->GetMaterial());
re.newre.DrawTilePic(0.0, 0.0, width, m_frame.size.height, m_statbar_material->GetMaterial());
if (alpha != 0.0 && m_statbar_material_flash)
{
re.SetColor(col);
m_statbar_material_flash->ReregisterMaterial();
re.DrawTilePic(0.0, 0.0, width, m_frame.size.height, m_statbar_material_flash->GetMaterial());
re.newre.DrawTilePic(0.0, 0.0, width, m_frame.size.height, m_statbar_material_flash->GetMaterial());
}
break;
}
@ -509,13 +509,13 @@ void UIFakkLabel::DrawStatbar( float frac )
float y = m_frame.size.height * (1.0 - frac);
m_statbar_material->ReregisterMaterial();
re.DrawTilePic(0.0, y, m_frame.size.width, m_frame.size.height, m_statbar_material->GetMaterial());
re.newre.DrawTilePic(0.0, y, m_frame.size.width, m_frame.size.height, m_statbar_material->GetMaterial());
if (alpha != 0.0 && m_statbar_material_flash)
{
re.SetColor(col);
m_statbar_material_flash->ReregisterMaterial();
re.DrawTilePic(0.0, y, m_frame.size.width, m_frame.size.height, m_statbar_material_flash->GetMaterial());
re.newre.DrawTilePic(0.0, y, m_frame.size.width, m_frame.size.height, m_statbar_material_flash->GetMaterial());
}
break;
}
@ -821,7 +821,7 @@ void UIFakkLabel::DrawStatCompass( float frac )
vVerts[2][1] = vCenter[1] - vCompassDir[1] * vCenter[1] - fSinVal * vCenter[0];
m_statbar_material->ReregisterMaterial();
re.DrawTrianglePic(vVerts, vTexCoords, m_statbar_material->GetMaterial());
re.newre.DrawTrianglePic(vVerts, vTexCoords, m_statbar_material->GetMaterial());
vVerts[0][0] = vVerts[2][0];
vVerts[0][1] = vVerts[2][1];
@ -834,7 +834,7 @@ void UIFakkLabel::DrawStatCompass( float frac )
vVerts[2][1] = vCenter[1] * fSinVal + vCenter[0] - vCompassDir[1] * vCenter[1];
m_statbar_material->ReregisterMaterial();
re.DrawTrianglePic(vVerts, vTexCoords, m_statbar_material->GetMaterial());
re.newre.DrawTrianglePic(vVerts, vTexCoords, m_statbar_material->GetMaterial());
}
void UIFakkLabel::DrawStatSpinner( float frac )

View file

@ -55,7 +55,7 @@ void View3D::Draw
set2D();
re.SavePerformanceCounters();
re.newre.SavePerformanceCounters();
Draw2D();
}
@ -132,7 +132,7 @@ void View3D::DrawFPS
if (fps->integer == 2)
{
re.SetColor(UBlack);
re.DrawBox(
re.newre.DrawBox(
0.0,
m_frame.pos.y + m_frame.size.height - m_font->getHeight(qfalse) * 4.0,
m_frame.pos.x + m_frame.size.width,

View file

@ -26,7 +26,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "../qcommon/q_shared.h"
#include "../qcommon/qcommon.h"
#include "../renderer/tr_public.h"
#include "../cgame/tr_types.h"
#include "../renderercommon/tr_public.h"
#include "keys.h"
#include "snd_public.h"
#include "../cgame/cg_public.h"

View file

@ -148,7 +148,7 @@ void Cbuf_InsertText( const char *text ) {
Cbuf_ExecuteText
============
*/
void Cbuf_ExecuteText (cbufExec_t exec_when, const char *text)
void Cbuf_ExecuteText (int exec_when, const char *text)
{
switch (exec_when)
{

View file

@ -1706,7 +1706,7 @@ Filename are relative to the quake search path
a null buffer will just return the file length without loading
============
*/
int FS_ReadFileEx( const char *qpath, void **buffer, qboolean quiet ) {
long FS_ReadFileEx( const char *qpath, void **buffer, qboolean quiet ) {
fileHandle_t h;
byte* buf;
qboolean isConfig;
@ -1824,7 +1824,7 @@ Filename are relative to the quake search path
a null buffer will just return the file length without loading
============
*/
int FS_ReadFile( const char *qpath, void **buffer ) {
long FS_ReadFile( const char *qpath, void **buffer ) {
return FS_ReadFileEx( qpath, buffer, qfalse );
}

View file

@ -439,7 +439,7 @@ void Cbuf_Init (void);
void Cbuf_AddText( const char *text );
// Adds command text at the end of the buffer, does NOT add a final \n
void Cbuf_ExecuteText(cbufExec_t exec_when, const char *text );
void Cbuf_ExecuteText(int exec_when, const char *text );
// this can be used in place of either Cbuf_AddText or Cbuf_InsertText
void Cbuf_Execute (int msec);
@ -705,8 +705,8 @@ size_t FS_Read( void *buffer, size_t len, fileHandle_t f );
void FS_FCloseFile( fileHandle_t f );
// note: you can't just fclose from another DLL, due to MS libc issues
int FS_ReadFileEx( const char *qpath, void **buffer, qboolean quiet );
int FS_ReadFile( const char *qpath, void **buffer );
long FS_ReadFileEx(const char* qpath, void** buffer, qboolean quiet);
long FS_ReadFile(const char* qpath, void** buffer);
const char *FS_Gamedir( void );
// returns the length of the file
// a null buffer will just return the file length without loading

View file

@ -0,0 +1,147 @@
/*
===========================================================================
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
OpenMoHAA source code is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the License,
or (at your option) any later version.
OpenMoHAA source code is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenMoHAA source code; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
===========================================================================
*/
#include "../../cgame/tr_types.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct dtiki_s dtiki_t;
typedef struct skelAnimFrame_s skelAnimFrame_t;
typedef struct {
qhandle_t(*SpawnEffectModel)(const char* name, vec3_t pos, vec3_t axis[3]);
qhandle_t(*RegisterServerModel)(const char* name);
void (*UnregisterServerModel)(qhandle_t model);
qhandle_t(*RefreshShaderNoMip)(const char* name);
void (*FreeModels)();
void (*PrintBSPFileSizes)();
int (*MapVersion)();
void (*AddRefEntityToScene)(const refEntity_t* re, int parentEntityNumber);
void (*AddRefSpriteToScene)(const refEntity_t* ent);
qboolean(*AddPolyToScene)(qhandle_t hShader, int numVerts, const polyVert_t* verts, int renderfx);
void (*AddTerrainMarkToScene)(int terrainIndex, qhandle_t hShader, int numVerts, const polyVert_t* verts, int renderfx);
void (*AddLightToScene)(const vec3_t org, float intensity, float r, float g, float b, int type);
void (*RenderScene)(const refdef_t* fd);
refEntity_t* (*GetRenderEntity)(int entityNumber);
void (*SavePerformanceCounters)();
void (*Set2DWindow)(int x, int y, int w, int h, float left, float right, float bottom, float top, float n, float f);
void (*DrawTilePic)(float x, float y, float w, float h, qhandle_t hShader);
void (*DrawTilePicOffset)(float x, float y, float w, float h, qhandle_t hShader, int offsetX, int offsetY);
void (*DrawTrianglePic)(vec2_t* points, vec2_t* texCoords, qhandle_t hShader);
void (*DrawBackground)(int cols, int rows, int bgr, uint8_t* data);
// Draw images for cinematic rendering, pass as 32 bit rgba
void (*DrawStretchRaw) (int x, int y, int w, int h, int cols, int rows, int components, const byte* data);
void (*DebugLine)(const vec3_t start, const vec3_t end, float r, float g, float b, float alpha);
void (*DrawBox)(float x, float y, float w, float h);
void (*AddBox)(float x, float y, float w, float h);
void (*BeginFrame)(stereoFrame_t stereoFrame);
void (*Scissor)(int x, int y, int width, int height);
void (*DrawLineLoop)(const vec2_t* points, int count, int stippleFactor, int stippleMask);
int (*MarkFragments)( int numPoints, const vec3_t *points, const vec3_t projection,
int maxPoints, vec3_t pointBuffer, int maxFragments, markFragment_t *fragmentBuffer, float fRadiusSquared);
int (*MarkFragmentsForInlineModel)(clipHandle_t bmodel, const vec3_t angles, const vec3_t origin, int numPoints,
const vec3_t* points, const vec3_t projection, int maxPoints, vec3_t pointBuffer,
int maxFragments, markFragment_t* fragmentBuffer, float radiusSquared);
void (*GetInlineModelBounds)(int index, vec3_t mins, vec3_t maxs);
void (*GetLightingForDecal)(vec3_t light, vec3_t facing, vec3_t origin);
void (*GetLightingForSmoke)(vec3_t light, vec3_t origin);
int (*R_GatherLightSources)(const vec3_t pos, vec3_t* lightPos, vec3_t* lightIntensity, int maxLights);
void (*ModelBounds)(qhandle_t model, vec3_t mins, vec3_t maxs);
float (*ModelRadius)(qhandle_t handle);
dtiki_t* (*R_Model_GetHandle)(qhandle_t handle);
void (*DrawString)(fontheader_t* font, const char* text, float x, float y, int maxLen, qboolean virtualScreen);
float (*GetFontHeight)(const fontheader_t* font);
float (*GetFontStringWidth)(const fontheader_t* font, const char* string);
fontheader_t* (*LoadFont)(const char* name);
void (*SwipeBegin)(float thisTime, float life, qhandle_t hShader);
void (*SwipePoint)(vec3_t point1, vec3_t point2, float time);
void (*SwipeEnd)();
void (*SetRenderTime)(int t);
float (*Noise)(float x, float y, float z, float t);
qboolean (*SetMode)(int mode, const glconfig_t* glConfig);
void (*SetFullscreen)(qboolean fullScreen);
int (*GetShaderWidth)(qhandle_t hShader);
int (*GetShaderHeight)(qhandle_t hShader);
const char* (*GetGraphicsInfo)();
void (*ForceUpdatePose)(refEntity_t* model);
orientation_t (*TIKI_Orientation)(refEntity_t* model, int tagNum);
qboolean (*TIKI_IsOnGround)(refEntity_t* model, int tagNum, float threshold);
void (*SetFrameNumber)(int frameNumber);
} refexport_new_t;
typedef struct {
char* (*LV_ConvertString)(char* string);
void (*Hunk_Clear)();
void (*Clear)();
void (*Cvar_SetDefault)(cvar_t* var, const char* varValue);
byte* (*CM_ClusterPVS)(int cluster);
int (*FS_OpenFile)(const char* qpath, fileHandle_t *file, qboolean uniqueFILE, qboolean quiet);
size_t (*FS_Read)(void* buffer, size_t len, fileHandle_t fileHandle);
void (*FS_CloseFile)(fileHandle_t fileHandle);
int (*FS_Seek)(fileHandle_t fileHandle, long offset, fsOrigin_t origin);
long (*FS_ReadFileEx)(const char* qpath, void** buffer, qboolean quiet);
void (*CM_BoxTrace)(trace_t* results, const vec3_t start, const vec3_t end, const vec3_t mins, const vec3_t maxs, int model, int brushMask, int cylinder);
int (*CM_TerrainSquareType)(int terrainPatch, int i, int j);
char* (*CM_EntityString)();
const char* (*CM_MapTime)();
int (*CG_PermanentMark)(const vec3_t origin, const vec3_t dir, float orientation, float sScale, float tScale, float red, float green, float blue, float alpha, qboolean doLighting, float sCenter, float tCenter, markFragment_t* markFragments, void* polyVerts);
int (*CG_PermanentTreadMarkDecal)(treadMark_t* treadMark, qboolean startSegment, qboolean doLighting, markFragment_t* markFragments, void* polyVerts);
int (*CG_PermanentUpdateTreadMark)(treadMark_t* treadMark, float alpha, float minSegment, float maxSegment, float maxOffset, float texScale);
void (*CG_ProcessInitCommands)(dtiki_t* tiki, refEntity_t* ent);
void (*CG_EndTiki)(dtiki_t* tiki);
void (*SetPerformanceCounters)(int totalTris, int totalVerts, int totalTexels, int worldTris, int worldVerts, int characterLights);
debugline_t** DebugLines;
int* numDebugLines;
debugstring_t** DebugStrings;
int* numDebugStrings;
orientation_t (*TIKI_OrientationInternal)(dtiki_t* tiki, int entNum, int tagNum, float scale);
qboolean (*TIKI_IsOnGroundInternal)(dtiki_t* tiki, int entNum, int tagNum, float thresHold);
void (*TIKI_SetPoseInternal)(void* skeletor, const frameInfo_t* frameInfo, const int* boneTag, const vec4_t *boneQuat, float actionWeight);
void* (*TIKI_Alloc)(size_t size);
float (*GetRadiusInternal)(dtiki_t* tiki, int entNum, float scale);
float (*GetCentroidRadiusInternal)(dtiki_t* tiki, int entNum, float scale, vec3_t centroid);
void (*GetFrameInternal)(dtiki_t* tiki, int entNum, skelAnimFrame_t* newFrame);
} refimport_new_t;
qboolean R_ImageExists(const char* name);
#ifdef __cplusplus
}
#endif

View file

@ -23,6 +23,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#define __TR_PUBLIC_H
#include "tr_types.h"
#include "new/tr_public_new.h"
#define REF_API_VERSION 8
@ -99,6 +100,8 @@ typedef struct {
qboolean (*inPVS)( const vec3_t p1, const vec3_t p2 );
void (*TakeVideoFrame)( int h, int w, byte* captureBuffer, byte *encodeBuffer, qboolean motionJpeg );
refexport_new_t newre;
} refexport_t;
//
@ -180,6 +183,8 @@ typedef struct {
void (*Sys_GLimpSafeInit)( void );
void (*Sys_GLimpInit)( void );
qboolean (*Sys_LowPhysicalMemory)( void );
refimport_new_t newri;
} refimport_t;

View file

@ -0,0 +1,14 @@
file(GLOB_RECURSE SHADER_GLSL_SRCS "code/renderergl2/glsl/*.glsl")
add_executable(stringify "code/tools/stringify.cpp")
foreach (shader ${SHADER_GLSL_SRCS})
get_filename_component(shaderfile ${shader} NAME_WE)
list(APPEND SHADER_SRCS ${CMAKE_CURRENT_BINARY_DIR}/${shaderfile}.c)
set_source_files_properties(${shaderfile}.c PROPERTIES GENERATED TRUE)
add_custom_command(OUTPUT ${shaderfile}.c
DEPENDS stringify ${shader}
COMMAND stringify ${shader} ${CMAKE_CURRENT_BINARY_DIR}/${shaderfile}.c
COMMENT "Generate c source for ${shader}: ${shaderfile}.c"
)
endforeach()

View file

@ -0,0 +1,23 @@
/*
===========================================================================
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
OpenMoHAA source code is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the License,
or (at your option) any later version.
OpenMoHAA source code is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenMoHAA source code; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
===========================================================================
*/
#include "../tr_local.h"

View file

@ -3227,3 +3227,32 @@ void R_SkinList_f( void ) {
}
/*
================
R_ImageExists
================
*/
qboolean R_ImageExists(const char* name) {
image_t* image;
long int hash;
if (name)
{
hash = generateHashValue(name);
image = hashTable[hash];
if (hash)
{
for (; image != NULL; image = image->next)
{
if (!strcmp(name, image->imgName)) {
return qtrue;
}
}
}
}
return qfalse;
}

59
code/tools/stringify.cpp Normal file
View file

@ -0,0 +1,59 @@
#include <cstdio>
#include <ctype.h>
#include <cstring>
#include <string>
#include <iostream>
#include <fstream>
// Because the ioQuake3 crew is unable to rely on anything else
// other than this sh*tty POSIX for portable development
// I'm doing this
int main(int argc, const char** argv)
{
std::ifstream ifp;
std::ofstream ofp;
std::string buffer;
if (argc < 3)
return 1;
std::string inFile = argv[1];
std::string outFile = argv[2];
ifp.open(inFile, std::ios_base::in);
if (!ifp.is_open())
return 2;
ofp.open(outFile, std::ios_base::out);
if (!ofp.is_open())
return 3;
// Strip extension
const size_t lastSlash = inFile.find_last_of("/\\") + 1;
const size_t lastDot = inFile.find_last_of(".");
std::string base = inFile.substr(lastSlash, lastDot - lastSlash);
ofp << "const char *fallbackShader_" << base << " = " << std::endl;
while (std::getline(ifp, buffer))
{
// Strip trailing whitespace from line
const char* end = buffer.c_str() + buffer.length() - 1;
while (end >= buffer.c_str() && isspace(*end)) {
end--;
}
std::string value = buffer.substr(0, buffer.c_str() - end);
// Write line enquoted, with a newline
ofp << "\"" << value << "\\n" << "\"" << std::endl;
}
ofp << ";" << std::endl;
ifp.close();
ofp.close();
return 0;
}

View file

@ -73,7 +73,7 @@ typedef struct uiimport_s {
int( *Rend_GetShaderHeight )( qhandle_t hShader );
void ( *File_PickFile )( const char *name, Listener *obj, Event& event );
void ( *File_ListFiles )( const char *filespec );
int ( *File_OpenFile )( const char *qpath, void **buffer );
long ( *File_OpenFile )( const char *qpath, void **buffer );
void ( *File_FreeFile )( void *buffer );
void ( *File_WriteFile )( const char *qpath, const void *buffer, int size );
uihandle_t ( *Snd_RegisterSound )( const char *sample, qboolean streamed );