working with shaders

This commit is contained in:
NurgazievichR 2025-04-08 12:46:25 +06:00
parent a4d2b732aa
commit 946c5d784b
8 changed files with 59 additions and 42 deletions

View File

@ -37,15 +37,16 @@ void Game::setup() {
std::cout << "Hello 1" << std::endl; std::cout << "Hello 1" << std::endl;
// Initialize renderer // Initialize renderer
/*
renderer.shaderManager.AddShaderFromFiles("default", "./default.vertex", "./default.fragment"); renderer.shaderManager.AddShaderFromFiles("default", "./default.vertex", "./default.fragment");
renderer.shaderManager.AddShaderFromFiles("defaultColor", "./defaultColor.vertex", "./defaultColor.fragment"); std::cout << "Hello 1.5" << std::endl;
renderer.shaderManager.AddShaderFromFiles("defaultHideCam", "./defaultHideCam.vertex", "./defaultHideCam.fragment"); // renderer.shaderManager.AddShaderFromFiles("defaultColor", "./defaultColor.vertex", "./defaultColor.fragment");
*/ // renderer.shaderManager.AddShaderFromFiles("defaultHideCam", "./defaultHideCam.vertex", "./defaultHideCam.fragment");
// Initialize game objects // Initialize game objects
std::cout << "Hello 2" << std::endl; std::cout << "Hello 2" << std::endl;
// gameObjects.initialize(); gameObjects.initialize();
std::cout << "Hello 3" << std::endl; std::cout << "Hello 3" << std::endl;
@ -60,7 +61,6 @@ void Game::drawScene() {
void Game::processTickCount() { void Game::processTickCount() {
#if 0
if (Environment::finalIsGood) if (Environment::finalIsGood)
{ {
return; return;
@ -101,7 +101,6 @@ void Game::processTickCount() {
lastTickCount = newTickCount; lastTickCount = newTickCount;
} }
#endif
} }
void Game::render() { void Game::render() {
@ -111,7 +110,7 @@ void Game::render() {
glClearColor(0.0f, 1.0f, 0.0f, 1.0f); glClearColor(0.0f, 1.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// drawScene(); drawScene();
processTickCount(); processTickCount();
SDL_GL_SwapWindow(ZL::Environment::window); SDL_GL_SwapWindow(ZL::Environment::window);
@ -119,7 +118,6 @@ void Game::render() {
void Game::update() { void Game::update() {
SDL_Event event; SDL_Event event;
std::cout << "HEE" << std::endl;
while (SDL_PollEvent(&event)) { while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) { if (event.type == SDL_QUIT) {
if (gameObjects.loadingThread.joinable()) if (gameObjects.loadingThread.joinable())

View File

@ -16,8 +16,9 @@ const float GameObjectManager::SELECTED_CUBE_ICON_SIZE = 244.0f;
const float GameObjectManager::SELECTED_CUBE_MARGIN = 50.0f; const float GameObjectManager::SELECTED_CUBE_MARGIN = 50.0f;
void GameObjectManager::initializeLoadingScreen() void GameObjectManager::initializeLoadingScreen()
{ {
loadingScreenTexturePtr = std::make_shared<Texture>(CreateTextureDataFromBmp24("./loading.bmp")); loadingScreenTexturePtr = std::make_shared<Texture>(CreateTextureDataFromBmp24("./loading.bmp"));
loadingScreenMesh = CreateRect2D( loadingScreenMesh = CreateRect2D(
{ Environment::width / 2.f, Environment::height / 2.f }, { Environment::width / 2.f, Environment::height / 2.f },
{ Environment::width / 2.f, Environment::height / 2.f }, { Environment::width / 2.f, Environment::height / 2.f },
@ -28,15 +29,17 @@ void GameObjectManager::initializeLoadingScreen()
} }
void GameObjectManager::initialize() { void GameObjectManager::initialize() {
initializeLoadingScreen(); initializeLoadingScreen();
std::function<bool()> loadingFunction1 = [this]() std::function<bool()> loadingFunction1 = [this]()
{ {
current_room_index = 0; current_room_index = 0;
objects_in_inventory = 0; objects_in_inventory = 0;
bearName = ""; bearName = "";
current_room_index = 0; current_room_index = 0;
objects_in_inventory = 0; objects_in_inventory = 0;
//coneTexturePtr = std::make_shared<Texture>(CreateTextureDataFromBmp24("./conus.bmp")); //coneTexturePtr = std::make_shared<Texture>(CreateTextureDataFromBmp24("./conus.bmp"));
@ -51,7 +54,7 @@ void GameObjectManager::initialize() {
loadingThread = std::thread([this]() { loadingThread = std::thread([this]() {
/*
preloadedRoomMeshArr.resize(3); preloadedRoomMeshArr.resize(3);
preloadedRoomMeshArr[0] = ZL::LoadFromTextFile("./oneroom001.txt"); preloadedRoomMeshArr[0] = ZL::LoadFromTextFile("./oneroom001.txt");
preloadedRoomMeshArr[0].Scale(10); preloadedRoomMeshArr[0].Scale(10);
@ -71,17 +74,17 @@ void GameObjectManager::initialize() {
violaIdleModel.LoadFromFile("./idleviola_uv010.txt"); violaIdleModel.LoadFromFile("./idleviola_uv010.txt");
violaWalkModel.LoadFromFile("./walkviola_uv010.txt"); violaWalkModel.LoadFromFile("./walkviola_uv010.txt");
sideThreadLoadingCompleted = true;*/ sideThreadLoadingCompleted = true;
}); });
std::function<bool()> loadingFunction2 = [this]() std::function<bool()> loadingFunction2 = [this]()
{ {
return sideThreadLoadingCompleted; return sideThreadLoadingCompleted;
}; };
std::function<bool()> loadingFunction3 = [this]() std::function<bool()> loadingFunction3 = [this]()
{ {
/*
// Create active object // Create active object
ActiveObject cubeForFirstRoomT; ActiveObject cubeForFirstRoomT;
cubeForFirstRoomT.name = "cube_T"; cubeForFirstRoomT.name = "cube_T";
@ -252,14 +255,13 @@ void GameObjectManager::initialize() {
rooms.push_back(room_3); rooms.push_back(room_3);
activeObjects = rooms[current_room_index].objects; activeObjects = rooms[current_room_index].objects;
*/
// Initialize audio // Initialize audio
/* /*
audioPlayer = std::make_unique<AudioPlayer>(); audioPlayer = std::make_unique<AudioPlayer>();
if (audioPlayer) { if (audioPlayer) {
audioPlayer->playMusic(rooms[current_room_index].sound_name); audioPlayer->playMusic(rooms[current_room_index].sound_name);
}*/ }*/
/*
#ifdef AUDIO #ifdef AUDIO
audioPlayerAsync.resetAsync(); audioPlayerAsync.resetAsync();
audioPlayerAsync.playMusicAsync(rooms[current_room_index].sound_name); audioPlayerAsync.playMusicAsync(rooms[current_room_index].sound_name);
@ -303,15 +305,14 @@ void GameObjectManager::initialize() {
//SDL_ShowCursor(SDL_DISABLE); //SDL_ShowCursor(SDL_DISABLE);
SDL_SetRelativeMouseMode(SDL_TRUE); SDL_SetRelativeMouseMode(SDL_TRUE);
*/
std::cout << "Hi2" << std::endl;
return true; return true;
}; };
//loadingFunctions.push_back(loadingFunction1); loadingFunctions.push_back(loadingFunction1);
//loadingFunctions.push_back(loadingFunction2); loadingFunctions.push_back(loadingFunction2);
//loadingFunctions.push_back(loadingFunction3); loadingFunctions.push_back(loadingFunction3);
} }
void GameObjectManager::switch_room(int index){ void GameObjectManager::switch_room(int index){
@ -712,9 +713,6 @@ void GameObjectManager::handleEvent(const SDL_Event& event) {
} }
void GameObjectManager::updateScene(size_t ms) { void GameObjectManager::updateScene(size_t ms) {
#if 0
const float SPEED = 0.1f; const float SPEED = 0.1f;
Vector2f directionVector = { 0.f, SPEED }; // x and z Vector2f directionVector = { 0.f, SPEED }; // x and z
@ -865,8 +863,6 @@ void GameObjectManager::updateScene(size_t ms) {
//float Environment::monsterTimer = 0.0; //float Environment::monsterTimer = 0.0;
//int Environment::monsterState = 1; //int Environment::monsterState = 1;
#endif
} }
bool GameObjectManager::isPointInObject(int screenX, int screenY, int objectScreenX, int objectScreenY) const { bool GameObjectManager::isPointInObject(int screenX, int screenY, int objectScreenX, int objectScreenY) const {
@ -911,4 +907,4 @@ void GameObjectManager::worldToScreenCoordinates(Vector3f objectPos,
screenY = (int)((1.0f + ndcY) * 0.5f * screenHeight); screenY = (int)((1.0f + ndcY) * 0.5f * screenHeight);
} }
} // namespace ZL } // namespace ZL

View File

@ -4,7 +4,7 @@
#include "Inventory.h" #include "Inventory.h"
#include <GL/gl.h> #include <GL/gl.h>
#include <iostream>
namespace ZL { namespace ZL {
@ -26,7 +26,6 @@ void RenderSystem::drawScene(GameObjectManager& gameObjects) {
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
glViewport(0, 0, Environment::width, Environment::height); glViewport(0, 0, Environment::width, Environment::height);
if (Environment::gameIsLoading) if (Environment::gameIsLoading)
{ {
drawLoadingScreen(gameObjects); drawLoadingScreen(gameObjects);
@ -42,6 +41,7 @@ void RenderSystem::drawScene(GameObjectManager& gameObjects) {
glClear(GL_DEPTH_BUFFER_BIT); glClear(GL_DEPTH_BUFFER_BIT);
drawUI(gameObjects); drawUI(gameObjects);
} }
CheckGlError(); CheckGlError();
} }

View File

@ -5,7 +5,8 @@
namespace ZL { namespace ZL {
ShaderResource::ShaderResource(const std::string& vertexCode, const std::string& fragmentCode) ShaderResource::ShaderResource(const std::string& vertexCode, const std::string& fragmentCode)
{ {
const int CONST_INFOLOG_LENGTH = 256; const int CONST_INFOLOG_LENGTH = 256;
char infoLog[CONST_INFOLOG_LENGTH]; char infoLog[CONST_INFOLOG_LENGTH];
@ -38,14 +39,13 @@ namespace ZL {
glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &fragmentShaderCompiled); glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &fragmentShaderCompiled);
glGetShaderInfoLog(fragmentShader, CONST_INFOLOG_LENGTH, &infoLogLength, infoLog); glGetShaderInfoLog(fragmentShader, CONST_INFOLOG_LENGTH, &infoLogLength, infoLog);
if (!vertexShaderCompiled) if (!vertexShaderCompiled)
{ {
throw std::runtime_error("Failed to compile vertex shader code!"); throw std::runtime_error("Failed to compile vertex shader code!");
} }
std::cout << "IM here" << std::endl;
if (!fragmentShaderCompiled) if (!fragmentShaderCompiled)
{ {
throw std::runtime_error("Failed to compile fragment shader code!"); throw std::runtime_error("Failed to compile fragment shader code!");
} }
@ -142,7 +142,6 @@ namespace ZL {
vertexShader = readTextFile(vertexShaderFileName); vertexShader = readTextFile(vertexShaderFileName);
fragmentShader = readTextFile(fragmentShaderFileName); fragmentShader = readTextFile(fragmentShaderFileName);
} }
///std::cout << "Shader: "<< vertexShader << std::endl; ///std::cout << "Shader: "<< vertexShader << std::endl;
shaderResourceMap[shaderName] = std::make_shared<ShaderResource>(vertexShader, fragmentShader); shaderResourceMap[shaderName] = std::make_shared<ShaderResource>(vertexShader, fragmentShader);
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 MiB

After

Width:  |  Height:  |  Size: 2.3 MiB

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -13,10 +13,34 @@ int main(int argc, char* argv[]) {
#ifdef EMSCRIPTEN #ifdef EMSCRIPTEN
SDL_Init(SDL_INIT_VIDEO); if (SDL_Init(SDL_INIT_VIDEO) != 0) {
SDL_Window* win = nullptr; std::cerr << "SDL_Init failed: " << SDL_GetError() << std::endl;
SDL_Renderer* ren = nullptr; return 1;
SDL_CreateWindowAndRenderer(CONST_WIDTH, CONST_HEIGHT, SDL_WINDOW_OPENGL, &win, &ren); }
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
SDL_Window* win = SDL_CreateWindow("Jumping Bird",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
CONST_WIDTH, CONST_HEIGHT,
SDL_WINDOW_OPENGL);
if (!win) {
std::cerr << "SDL_CreateWindow failed: " << SDL_GetError() << std::endl;
return 1;
}
SDL_GLContext glContext = SDL_GL_CreateContext(win);
if (!glContext) {
std::cerr << "SDL_GL_CreateContext failed: " << SDL_GetError() << std::endl;
return 1;
}
// Привязка контекста к окну — важно!
SDL_GL_MakeCurrent(win, glContext);
ZL::Environment::window = win; ZL::Environment::window = win;
#else #else
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS) != 0) { if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS) != 0) {