Skip to content

Commit

Permalink
# - more shaders, more, more!
Browse files Browse the repository at this point in the history
  • Loading branch information
en-software committed Dec 17, 2023
1 parent 84fcf82 commit 3f438d2
Show file tree
Hide file tree
Showing 19 changed files with 661 additions and 71 deletions.
26 changes: 24 additions & 2 deletions blooDot.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -496,16 +496,38 @@
</None>
<None Include="res\convo.1.bml" />
<None Include="res\dingdescriptions.1.bml" />
<None Include="res\fragment.glsl" />
<None Include="res\manufacturer.dlg">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Xassy|x64'">true</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Xassy|x64'">false</DeploymentContent>
</None>
<None Include="res\shaders\lifecurtain-fragment.glsl">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
</None>
<None Include="res\shaders\lifecurtain-vertex.glsl">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
</None>
<None Include="res\shaders\rain-fragment.glsl">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
</None>
<None Include="res\shaders\rain-vertex.glsl">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
</None>
<None Include="res\shaders\retro-fragment.glsl">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
</None>
<None Include="res\shaders\retro-vertex.glsl">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
</None>
<None Include="res\snurch-snavior-collision.csv">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
</None>
<None Include="res\vertex.glsl" />
<None Include="vcpkg.json" />
</ItemGroup>
<ItemGroup>
Expand Down
16 changes: 14 additions & 2 deletions blooDot.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -529,10 +529,22 @@
<None Include="planning\creatormode.ligma">
<Filter>Planning</Filter>
</None>
<None Include="res\fragment.glsl">
<None Include="res\shaders\lifecurtain-fragment.glsl">
<Filter>Resource Files\shaders</Filter>
</None>
<None Include="res\vertex.glsl">
<None Include="res\shaders\lifecurtain-vertex.glsl">
<Filter>Resource Files\shaders</Filter>
</None>
<None Include="res\shaders\rain-fragment.glsl">
<Filter>Resource Files\shaders</Filter>
</None>
<None Include="res\shaders\rain-vertex.glsl">
<Filter>Resource Files\shaders</Filter>
</None>
<None Include="res\shaders\retro-fragment.glsl">
<Filter>Resource Files\shaders</Filter>
</None>
<None Include="res\shaders\retro-vertex.glsl">
<Filter>Resource Files\shaders</Filter>
</None>
</ItemGroup>
Expand Down
76 changes: 74 additions & 2 deletions chunk-constants.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,5 +51,77 @@ constexpr int const CHUNK_KEY_LANG_FLAG_UA_PNG = 47;
constexpr int const CHUNK_KEY_DINGS_SNURCH_SNAVIOR_HEAD_ROOOF = 48;
constexpr int const CHUNK_KEY_DINGS_SNURCH_SNAVIOR_FLOOR = 49;
constexpr int const CHUNK_KEY_DINGS_SNURCH_SNAVIOR_COLLISION = 50;
constexpr int const CHUNK_KEY_SHADER_VERTEX = 51;
constexpr int const CHUNK_KEY_SHADER_FRAGMENT = 52;
constexpr int const CHUNK_KEY_SHADER_RETRO_VERTEX = 51;
constexpr int const CHUNK_KEY_SHADER_RETRO_FRAGMENT = 52;
constexpr int const CHUNK_KEY_SHADER_LIFECURTAIN_VERTEX = 53;
constexpr int const CHUNK_KEY_SHADER_LIFECURTAIN_FRAGMENT = 54;
constexpr int const CHUNK_KEY_SHADER_RAIN_VERTEX = 55;
constexpr int const CHUNK_KEY_SHADER_RAIN_FRAGMENT = 56;

#ifndef NDEBUG
inline const char* GetUncookedRelPath(int chunkIndex)
{
switch(chunkIndex)
{
case 0: return "chel-f.png"; // CHUNK_KEY_DINGS_CHEL_F
case 1: return "projectile-decay.wav"; // CHUNK_KEY_SFX_PROJECTILEDECAY
case 2: return "nn-splash-scene.png"; // CHUNK_KEY_SPLASH
case 3: return "clear-sans-normie.ttf"; // CHUNK_KEY_FONT_DIALOG
case 4: return "clear-sans-fat.ttf"; // CHUNK_KEY_FONT_DIALOG_FAT
case 5: return "yesevaone-regular-show.otf"; // CHUNK_KEY_FONT_FANCY
case 6: return "esl-gothic-shavian.ttf"; // CHUNK_KEY_FONT_ALIEN
case 7: return "barrel-indigo.png"; // CHUNK_KEY_DINGS_BARREL_INDIGO
case 8: return "barrel-wooden.png"; // CHUNK_KEY_DINGS_BARREL_WOODEN
case 9: return "floorrocktile-cracked.png"; // CHUNK_KEY_DINGS_FLOORROCKTILE_CRACKED
case 10: return "floorrocktile.png"; // CHUNK_KEY_DINGS_FLOORROCKTILE
case 11: return "floorstonetile-ochre.png"; // CHUNK_KEY_DINGS_FLOORSTONETILE_OCHRE
case 12: return "floorstonetile-purple.png"; // CHUNK_KEY_DINGS_FLOORSTONETILE_PURPLE
case 13: return "floorstonetile-slate.png"; // CHUNK_KEY_DINGS_FLOORSTONETILE_SLATE
case 14: return "grass.png"; // CHUNK_KEY_DINGS_GRASS
case 15: return "lettuce.png"; // CHUNK_KEY_DINGS_LETTUCE
case 16: return "schaedel.png"; // CHUNK_KEY_DINGS_SCHAED
case 17: return "snowblock.png"; // CHUNK_KEY_DINGS_SNOW
case 18: return "barrel-loaded.png"; // CHUNK_KEY_DINGS_BARREL_LOADED
case 19: return "rooof-meshtile.png"; // CHUNK_KEY_DINGS_ROOOFTILE_MESH
case 20: return "gpu-chan.png"; // CHUNK_KEY_GPU_CHAN
case 21: return "bump.wav"; // CHUNK_KEY_SFX_BUMP
case 22: return "selchg.wav"; // CHUNK_KEY_SFX_SELCHG
case 23: return "selconf.wav"; // CHUNK_KEY_SFX_SELCONF
case 24: return "asterisk.wav"; // CHUNK_KEY_SFX_ASTERISK
case 25: return "floor.wav"; // CHUNK_KEY_SFX_FLOOR
case 26: return "walls.wav"; // CHUNK_KEY_SFX_WALLS
case 27: return "rooof.wav"; // CHUNK_KEY_SFX_ROOOF
case 28: return "icon-modex.png"; // CHUNK_KEY_UI_ICON_MODEX
case 29: return "icon-divine.png"; // CHUNK_KEY_UI_ICON_DIVINE
case 30: return "icon-herc.png"; // CHUNK_KEY_UI_ICON_HERC
case 31: return "icon-hd.png"; // CHUNK_KEY_UI_ICON_HD
case 32: return "menu-emptyness.png"; // CHUNK_KEY_UI_MENU_EMPTY
case 33: return "cricket-fritz.wav"; // CHUNK_KEY_SFX_CRICKET_FRITZ
case 34: return "cricket-franz.wav"; // CHUNK_KEY_SFX_CRICKET_FRANZ
case 35: return "player1.png"; // CHUNK_KEY_MOBS_PLAYER1
case 36: return "player2.png"; // CHUNK_KEY_MOBS_PLAYER2
case 37: return "player3.png"; // CHUNK_KEY_MOBS_PLAYER3
case 38: return "player4.png"; // CHUNK_KEY_MOBS_PLAYER4
case 39: return "manufacturer.dlg"; // CHUNK_KEY_DLG_MANUFACTURER
case 40: return "dingdescriptions.1.bml"; // CHUNK_KEY_DING_DESCRIPTIONS_1
case 41: return "convo.1.bml"; // CHUNK_KEY_CONVO_1
case 42: return "sample-map.png"; // CHUNK_KEY_SAMPLE_MAP
case 43: return "gamecontrollerdb.txt"; // CHUNK_KEY_GAME_CONTROLLER_DB_TXT
case 44: return "langflag-am.png"; // CHUNK_KEY_LANG_FLAG_AM_PNG
case 45: return "langflag-de.png"; // CHUNK_KEY_LANG_FLAG_DE_PNG
case 46: return "langflag-fi.png"; // CHUNK_KEY_LANG_FLAG_FI_PNG
case 47: return "langflag-ua.png"; // CHUNK_KEY_LANG_FLAG_UA_PNG
case 48: return "snurch-snavior-head-rooof.png"; // CHUNK_KEY_DINGS_SNURCH_SNAVIOR_HEAD_ROOOF
case 49: return "snurch-snavior-floor.png"; // CHUNK_KEY_DINGS_SNURCH_SNAVIOR_FLOOR
case 50: return "snurch-snavior-collision.csv"; // CHUNK_KEY_DINGS_SNURCH_SNAVIOR_COLLISION
case 51: return "shaders/retro-vertex.glsl"; // CHUNK_KEY_SHADER_RETRO_VERTEX
case 52: return "shaders/retro-fragment.glsl"; // CHUNK_KEY_SHADER_RETRO_FRAGMENT
case 53: return "shaders/lifecurtain-vertex.glsl"; // CHUNK_KEY_SHADER_LIFECURTAIN_VERTEX
case 54: return "shaders/lifecurtain-fragment.glsl"; // CHUNK_KEY_SHADER_LIFECURTAIN_FRAGMENT
case 55: return "shaders/rain-vertex.glsl"; // CHUNK_KEY_SHADER_RAIN_VERTEX
case 56: return "shaders/rain-fragment.glsl"; // CHUNK_KEY_SHADER_RAIN_FRAGMENT
}

return nullptr;
}
#endif
8 changes: 6 additions & 2 deletions chunk-sizes.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ size_t chunkSizes[] = {
10422, // CHUNK_KEY_DINGS_SNURCH_SNAVIOR_HEAD_ROOOF
106415, // CHUNK_KEY_DINGS_SNURCH_SNAVIOR_FLOOR
702, // CHUNK_KEY_DINGS_SNURCH_SNAVIOR_COLLISION
882, // CHUNK_KEY_SHADER_VERTEX
4873 // CHUNK_KEY_SHADER_FRAGMENT
882, // CHUNK_KEY_SHADER_RETRO_VERTEX
4873, // CHUNK_KEY_SHADER_RETRO_FRAGMENT
882, // CHUNK_KEY_SHADER_LIFECURTAIN_VERTEX
4873, // CHUNK_KEY_SHADER_LIFECURTAIN_FRAGMENT
882, // CHUNK_KEY_SHADER_RAIN_VERTEX
4873 // CHUNK_KEY_SHADER_RAIN_FRAGMENT
};
43 changes: 42 additions & 1 deletion enxassy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
int Cook(XassyCookInfo *cookStats)
{
std::stringstream chunkConstants;
std::stringstream debugLocations;
std::stringstream chunkSizes;
chunkConstants
<< "#pragma once"
Expand Down Expand Up @@ -57,8 +58,24 @@ int Cook(XassyCookInfo *cookStats)
<< "\n";

std::stringstream rawPath;
uintmax_t uncompressedSize;
rawPath << basePath << "..\\..\\res\\" << fileName;
auto const& uncompressedSize = std::filesystem::file_size(rawPath.str());
try
{
uncompressedSize = std::filesystem::file_size(rawPath.str());
}
catch(...)
{
std::cerr
<< "Failed to open \""
<< fileName
<< "\" for "
<< identifier
<< "\n";

return CookReturnCodeInputFileNotFound;
}

std::ifstream rawFile(rawPath.str(), std::ios::binary);
if (rawFile.is_open() && rawFile.good())
{
Expand Down Expand Up @@ -91,6 +108,17 @@ int Cook(XassyCookInfo *cookStats)
<< resNumber
<< ";\n";

// with this, we can access uncooked stuff
// while we're running in debug environment
debugLocations
<< "\tcase "
<< resNumber
<< ": return \""
<< fileName
<< "\"; // "
<< identifier
<< "\n";

std::cout
<< compressedSize
<< " bytes written, original was "
Expand Down Expand Up @@ -156,6 +184,19 @@ int Cook(XassyCookInfo *cookStats)
return CookReturnCodeCopyFail;
}

auto const&& debugLocationsStr = debugLocations.str();
chunkConstants
<< "\n"
<< "#ifndef NDEBUG\n"
<< "inline const char* GetUncookedRelPath(int chunkIndex)\n"
<< "{\n"
<< "\tswitch(chunkIndex)\n"
<< "\t{\n"
<< debugLocationsStr
<< "\t}\n\n\treturn nullptr;\n"
<< "}\n"
<< "#endif\n";

/* write the chunk constants header */
std::stringstream chunkConstantsPath;
chunkConstantsPath << basePath << "..\\..\\" << "chunk-constants.h";
Expand Down
1 change: 1 addition & 0 deletions enxassy.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
constexpr int const CookReturnCodeSuccess = 0;
constexpr int const CookReturnCodeRecipeFail = 0xe1;
constexpr int const CookReturnCodeCopyFail = 0xe2;
constexpr int const CookReturnCodeInputFileNotFound = 0xe3;

struct XassyCookInfo {
int numFiles;
Expand Down
8 changes: 6 additions & 2 deletions gameres.xassy.recipe
Original file line number Diff line number Diff line change
Expand Up @@ -49,5 +49,9 @@ langflag-ua.png CHUNK_KEY_LANG_FLAG_UA_PNG
snurch-snavior-head-rooof.png CHUNK_KEY_DINGS_SNURCH_SNAVIOR_HEAD_ROOOF
snurch-snavior-floor.png CHUNK_KEY_DINGS_SNURCH_SNAVIOR_FLOOR
snurch-snavior-collision.csv CHUNK_KEY_DINGS_SNURCH_SNAVIOR_COLLISION
vertex.glsl CHUNK_KEY_SHADER_VERTEX
fragment.glsl CHUNK_KEY_SHADER_FRAGMENT
shaders/retro-vertex.glsl CHUNK_KEY_SHADER_RETRO_VERTEX
shaders/retro-fragment.glsl CHUNK_KEY_SHADER_RETRO_FRAGMENT
shaders/lifecurtain-vertex.glsl CHUNK_KEY_SHADER_LIFECURTAIN_VERTEX
shaders/lifecurtain-fragment.glsl CHUNK_KEY_SHADER_LIFECURTAIN_FRAGMENT
shaders/rain-vertex.glsl CHUNK_KEY_SHADER_RAIN_VERTEX
shaders/rain-fragment.glsl CHUNK_KEY_SHADER_RAIN_FRAGMENT
75 changes: 69 additions & 6 deletions orchestrator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ bool toggleDebugView = false;

namespace blooDot::Orchestrator
{
constexpr UCHAR SHADER_PROGRAM_INDEX_NONE = 0;
constexpr UCHAR SHADER_PROGRAM_INDEX_RETRO = 1;
constexpr UCHAR SHADER_PROGRAM_INDEX_LIFECURTAIN = 2;
constexpr UCHAR SHADER_PROGRAM_INDEX_RAIN = 3;
constexpr UCHAR SHADER_PROGRAMS_COUNT = 4; // "none" is no shader program, but counts

SDL_Event mainEvent;
b2World world({ 0,0 });
b2BodyDef bodyDef;
Expand All @@ -37,6 +43,9 @@ namespace blooDot::Orchestrator
int32 velocityIterations = 6;
int32 positionIterations = 2;
SDL_GameController* controller = nullptr;
GLuint shaderPrograms[SHADER_PROGRAMS_COUNT] = {0,0,0,0};
GLuint shaderProgramId = 0;
int currentShaderIndex = 0;

void MainLoop(SDL_Renderer* renderer, SDL_Window* mainWindow)
{
Expand Down Expand Up @@ -141,10 +150,22 @@ namespace blooDot::Orchestrator
}

// shaders
auto programId = CompileProgram
shaderPrograms[SHADER_PROGRAM_INDEX_RETRO] = CompileProgram
(
CHUNK_KEY_SHADER_VERTEX,
CHUNK_KEY_SHADER_FRAGMENT
CHUNK_KEY_SHADER_RETRO_VERTEX,
CHUNK_KEY_SHADER_RETRO_FRAGMENT
);

shaderPrograms[SHADER_PROGRAM_INDEX_LIFECURTAIN] = CompileProgram
(
CHUNK_KEY_SHADER_LIFECURTAIN_VERTEX,
CHUNK_KEY_SHADER_LIFECURTAIN_FRAGMENT
);

shaderPrograms[SHADER_PROGRAM_INDEX_RAIN] = CompileProgram
(
CHUNK_KEY_SHADER_RAIN_VERTEX,
CHUNK_KEY_SHADER_RAIN_FRAGMENT
);

texTarget = SDL_CreateTexture
Expand Down Expand Up @@ -214,6 +235,29 @@ namespace blooDot::Orchestrator
}
}
}
else
{
if (mainEvent.key.keysym.sym == SDL_KeyCode::SDLK_0)
{
currentShaderIndex = SHADER_PROGRAM_INDEX_NONE;
shaderProgramId = 0;
}
else if (mainEvent.key.keysym.sym == SDL_KeyCode::SDLK_1)
{
currentShaderIndex = SHADER_PROGRAM_INDEX_RETRO;
shaderProgramId = shaderPrograms[currentShaderIndex];
}
else if (mainEvent.key.keysym.sym == SDL_KeyCode::SDLK_2)
{
currentShaderIndex = SHADER_PROGRAM_INDEX_LIFECURTAIN;
shaderProgramId = shaderPrograms[currentShaderIndex];
}
else if (mainEvent.key.keysym.sym == SDL_KeyCode::SDLK_3)
{
currentShaderIndex = SHADER_PROGRAM_INDEX_RAIN;
shaderProgramId = shaderPrograms[currentShaderIndex];
}
}

break;

Expand Down Expand Up @@ -444,7 +488,11 @@ namespace blooDot::Orchestrator
}

NEXTFRAME:
SDL_SetRenderTarget(renderer, texTarget);
if (currentShaderIndex > SHADER_PROGRAM_INDEX_NONE)
{
SDL_SetRenderTarget(renderer, texTarget);
}

SDL_RenderClear(renderer);
GameViewRenderFrame();
#ifndef NDEBUG
Expand All @@ -454,8 +502,14 @@ namespace blooDot::Orchestrator
}

#endif
//SDL_RenderPresent(renderer);
PresentBackBuffer(renderer, mainWindow, texTarget, programId);
if (currentShaderIndex == SHADER_PROGRAM_INDEX_NONE)
{
SDL_RenderPresent(renderer);
}
else
{
PresentBackBuffer(renderer, mainWindow, texTarget, shaderProgramId);
}

frameEnded = SDL_GetPerformanceCounter();
const auto& frameTime = (frameEnded - frameStart) / frequencyMill;
Expand All @@ -480,13 +534,22 @@ namespace blooDot::Orchestrator
SDL_GameControllerClose(controller);
}

_TeardownGPU();
DestroyTexture(&texTarget);
TeardownDingSheets();
GameviewTeardown();
ClearWorldData();
TeardownDings();
}

void _TeardownGPU()
{
for (auto i = SHADER_PROGRAM_INDEX_NONE + 1; i < SHADER_PROGRAMS_COUNT; ++i)
{
DeleteGPUProgram(shaderPrograms[i]);
}
}

void _InitiatePlayerMovement(b2Body* body, float impulseX, float impulseY)
{
if (impulseX != 0 || impulseY != 0)
Expand Down
1 change: 1 addition & 0 deletions orchestrator.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,5 @@ namespace blooDot::Orchestrator

void _InitiatePlayerMovement(b2Body* body, float impulseX, float impulseY);
void _HandleSave(bool isAutosave = false);
void _TeardownGPU();
}
File renamed without changes.
File renamed without changes.
Loading

0 comments on commit 3f438d2

Please sign in to comment.