Changeset 4e705d6 in opengl-game for vulkan-game.cpp


Ignore:
Timestamp:
Jun 9, 2020, 2:14:06 PM (4 years ago)
Author:
Dmitry Portnoy <dmitry.portnoy@…>
Branches:
feature/imgui-sdl, master
Children:
e1f88a9
Parents:
b8d4456
Message:

Rename initWindow to initUI and move code for initializing the UI overlay into it

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vulkan-game.cpp

    rb8d4456 r4e705d6  
    4242   cout << "Vulkan Game" << endl;
    4343
    44    // This gets the runtime version, use SDL_VERSION() for the comppile-time version
     44   if (initUI(width, height, guiFlags) == RTWO_ERROR) {
     45      return;
     46   }
     47
     48   initVulkan();
     49   mainLoop();
     50   cleanup();
     51
     52   close_log();
     53}
     54
     55bool VulkanGame::initUI(int width, int height, unsigned char guiFlags) {
    4556   // TODO: Create a game-gui function to get the gui version and retrieve it that way
    46    SDL_GetVersion(&sdlVersion);
     57
     58   SDL_VERSION(&sdlVersion); // This gets the compile-time version
     59   SDL_GetVersion(&sdlVersion); // This gets the runtime version
     60
     61   cout << "SDL "<<
     62      to_string(sdlVersion.major) << "." <<
     63      to_string(sdlVersion.minor) << "." <<
     64      to_string(sdlVersion.patch) << endl;
    4765
    4866   // TODO: Refactor the logger api to be more flexible,
     
    5472      to_string(sdlVersion.patch).c_str());
    5573
     74   // TODO: Use open_Log() and related functions instead of gl_log ones
    5675   open_log();
    5776   get_log() << "starting SDL" << endl;
     
    6180      (int)sdlVersion.patch << endl;
    6281
    63    if (initWindow(width, height, guiFlags) == RTWO_ERROR) {
    64       return;
    65    }
    66 
    67    initVulkan();
    68    mainLoop();
    69    cleanup();
    70 
    71    close_log();
    72 }
    73 
    74 // TODO: Make some more init functions, or call this initUI if the
    75 // amount of things initialized here keeps growing
    76 bool VulkanGame::initWindow(int width, int height, unsigned char guiFlags) {
    7782   // TODO: Put all fonts, textures, and images in the assets folder
    7883   gui = new GameGui_SDL();
     
    102107   }
    103108
    104    SDL_VERSION(&sdlVersion);
    105 
    106    cout << "SDL "<<
    107       to_string(sdlVersion.major) << "." <<
    108       to_string(sdlVersion.minor) << "." <<
    109       to_string(sdlVersion.patch) << endl;
     109   uiOverlay = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET,
     110      gui->getWindowWidth(), gui->getWindowHeight());
     111
     112   if (uiOverlay == nullptr) {
     113      cout << "Unable to create blank texture! SDL Error: " << SDL_GetError() << endl;
     114      return RTWO_ERROR;
     115   }
     116   if (SDL_SetTextureBlendMode(uiOverlay, SDL_BLENDMODE_BLEND) != 0) {
     117      cout << "Unable to set texture blend mode! SDL Error: " << SDL_GetError() << endl;
     118      return RTWO_ERROR;
     119   }
     120
     121   SDL_SetRenderTarget(renderer, uiOverlay);
    110122
    111123   font = TTF_OpenFont("assets/fonts/lazy.ttf", 28);
     
    145157
    146158   SDL_FreeSurface(imageSDLSurface);
    147 
    148    // In SDL 2.0.10 (currently, the latest), SDL_TEXTUREACCESS_TARGET is required to get a transparent overlay working
    149    // However, the latest SDL version available through homebrew on Mac is 2.0.9, which requires SDL_TEXTUREACCESS_STREAMING
    150    // I tried building sdl 2.0.10 (and sdl_image and sdl_ttf) from source on Mac, but had some issues, so this is easier
    151    // until the homebrew recipe is updated
    152    if (sdlVersion.major == 2 && sdlVersion.minor == 0 && sdlVersion.patch == 9) {
    153       uiOverlay = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STREAMING,
    154          gui->getWindowWidth(), gui->getWindowHeight());
    155    } else {
    156       uiOverlay = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET,
    157          gui->getWindowWidth(), gui->getWindowHeight());
    158    }
    159 
    160    if (uiOverlay == nullptr) {
    161       cout << "Unable to create blank texture! SDL Error: " << SDL_GetError() << endl;
    162       return RTWO_ERROR;
    163    }
    164    if (SDL_SetTextureBlendMode(uiOverlay, SDL_BLENDMODE_BLEND) != 0) {
    165       cout << "Unable to set texture blend mode! SDL Error: " << SDL_GetError() << endl;
    166       return RTWO_ERROR;
    167    }
    168 
    169    SDL_SetRenderTarget(renderer, uiOverlay);
    170159
    171160   return RTWO_SUCCESS;
     
    755744               break;
    756745            case UI_EVENT_MOUSEBUTTONDOWN:
    757                cout << "Mouse button down event detected" << endl;
    758                break;
    759746            case UI_EVENT_MOUSEBUTTONUP:
    760                cout << "Mouse button up event detected" << endl;
    761                break;
    762747            case UI_EVENT_MOUSEMOTION:
    763748               break;
    764749            case UI_EVENT_UNKNOWN:
    765                cout << "Unknown event type: 0x" << hex << e.unknown.eventType << dec << endl;
     750               //cout << "Unknown event type: 0x" << hex << e.unknown.eventType << dec << endl;
    766751               break;
    767752            default:
     
    10301015   uint32_t imageIndex;
    10311016
     1017   // TODO: Recreate the swap chain here if the user went to a new screen
     1018
    10321019   VkResult result = vkAcquireNextImageKHR(device, swapChain, numeric_limits<uint64_t>::max(),
    10331020      imageAvailableSemaphores[currentFrame], VK_NULL_HANDLE, &imageIndex);
     
    11271114   // If they do, I don't need to check for that
    11281115
     1116   if (fontSDLTexture != nullptr) {
     1117      SDL_DestroyTexture(fontSDLTexture);
     1118      fontSDLTexture = nullptr;
     1119   }
     1120
     1121   if (imageSDLTexture != nullptr) {
     1122      SDL_DestroyTexture(imageSDLTexture);
     1123      imageSDLTexture = nullptr;
     1124   }
     1125
     1126   TTF_CloseFont(font);
     1127   font = nullptr;
     1128
    11291129   if (uiOverlay != nullptr) {
    11301130      SDL_DestroyTexture(uiOverlay);
    11311131      uiOverlay = nullptr;
    11321132   }
    1133 
    1134    if (fontSDLTexture != nullptr) {
    1135       SDL_DestroyTexture(fontSDLTexture);
    1136       fontSDLTexture = nullptr;
    1137    }
    1138 
    1139    if (imageSDLTexture != nullptr) {
    1140       SDL_DestroyTexture(imageSDLTexture);
    1141       imageSDLTexture = nullptr;
    1142    }
    1143 
    1144    TTF_CloseFont(font);
    1145    font = nullptr;
    11461133
    11471134   SDL_DestroyRenderer(renderer);
Note: See TracChangeset for help on using the changeset viewer.