#pragma once #include #include // TIPS: // ======================================================================= // Abans de crear el renderer, cridar a la següent funció: // // SDL_SetHint(SDL_HINT_RENDER_DRIVER, "opengl"); // // Aixó li diu que volem un renderer que use especificament opengl. A més, // al crear el renderer li tenim que dir que el volem que use acceeració // per hardware, i que soporte render a textura. Per exemple: // // SDL_Renderer *ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | // SDL_RENDERER_TARGETTEXTURE); // // Per altra part, al crear la textura tenim que definir que puga ser target // de renderitzat (SDL_TEXTUREACCESS_TARGET), per exemple: // // SDL_Texture *tex = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, // SDL_TEXTUREACCESS_TARGET, 320, 240); // // Els shaders li'ls passem com una cadena, som nosaltres els que s'encarreguem // de carregarlos de disc, amb fopen, ifstream, jfile o el que vullgues. // Si els tens en un std::string, passa-li-la com "cadena.c_str()". // // Poden ser els dos el mateix arxiu, com fa libRetro, jo desde dins ja fique // els defines necessaris. Si es el mateix arxiu, pots no ficar el quart paràmetre. // // Els shaders de libRetro no funcionen directament, hi ha que fer algunes modificacions. // // El pintat final de la teua escena l'has de fer com si "backBuffer" fora la pantalla. // // Ah! una cosa mes: al compilar, en Linux afegir "-lGL", en Windows afegir "-lopengl32". // En Mac ni idea namespace shader { // const bool init(SDL_Window *ventana, SDL_Texture *texturaBackBuffer, const char *vertexShader, const char *fragmentShader = nullptr); bool init(SDL_Window* ventana, SDL_Texture* texturaBackBuffer, const std::string& vertexShader, const std::string& fragmentShader = ""); void render(); } // namespace shader