#ifndef NO_SHADERS #pragma once #include // para SDL_Texture #include // para SDL_Window // 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 *win, SDL_Texture *backBuffer, const char *vertexShader, const char *fragmentShader = nullptr); void render(); } #endif