src/video/SDL_renderer_gles.c
changeset 5138 da10636e5eca
parent 5053 b5b42be9333c
child 5140 e743b9c3f6d6
equal deleted inserted replaced
5137:e594f07297a9 5138:da10636e5eca
    70 static int GLES_SetTextureColorMod(SDL_Renderer * renderer,
    70 static int GLES_SetTextureColorMod(SDL_Renderer * renderer,
    71                                    SDL_Texture * texture);
    71                                    SDL_Texture * texture);
    72 static int GLES_SetTextureAlphaMod(SDL_Renderer * renderer,
    72 static int GLES_SetTextureAlphaMod(SDL_Renderer * renderer,
    73                                    SDL_Texture * texture);
    73                                    SDL_Texture * texture);
    74 static int GLES_SetTextureBlendMode(SDL_Renderer * renderer,
    74 static int GLES_SetTextureBlendMode(SDL_Renderer * renderer,
    75                                     SDL_Texture * texture);
       
    76 static int GLES_SetTextureScaleMode(SDL_Renderer * renderer,
       
    77                                     SDL_Texture * texture);
    75                                     SDL_Texture * texture);
    78 static int GLES_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture,
    76 static int GLES_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture,
    79                               const SDL_Rect * rect, const void *pixels,
    77                               const SDL_Rect * rect, const void *pixels,
    80                               int pitch);
    78                               int pitch);
    81 static int GLES_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture,
    79 static int GLES_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture,
   110       SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED),
   108       SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED),
   111      (SDL_TEXTUREMODULATE_NONE | SDL_TEXTUREMODULATE_COLOR |
   109      (SDL_TEXTUREMODULATE_NONE | SDL_TEXTUREMODULATE_COLOR |
   112       SDL_TEXTUREMODULATE_ALPHA),
   110       SDL_TEXTUREMODULATE_ALPHA),
   113      (SDL_BLENDMODE_NONE | SDL_BLENDMODE_MASK |
   111      (SDL_BLENDMODE_NONE | SDL_BLENDMODE_MASK |
   114       SDL_BLENDMODE_BLEND | SDL_BLENDMODE_ADD | SDL_BLENDMODE_MOD),
   112       SDL_BLENDMODE_BLEND | SDL_BLENDMODE_ADD | SDL_BLENDMODE_MOD),
   115      (SDL_SCALEMODE_NONE | SDL_SCALEMODE_FAST | SDL_SCALEMODE_SLOW), 6,
       
   116      {
   113      {
   117       /* OpenGL ES 1.x supported formats list */
   114       /* OpenGL ES 1.x supported formats list */
   118       SDL_PIXELFORMAT_RGBA4444,
   115       SDL_PIXELFORMAT_RGBA4444,
   119       SDL_PIXELFORMAT_RGBA5551,
   116       SDL_PIXELFORMAT_RGBA5551,
   120       SDL_PIXELFORMAT_RGB565,
   117       SDL_PIXELFORMAT_RGB565,
   239     renderer->SetTexturePalette = GLES_SetTexturePalette;
   236     renderer->SetTexturePalette = GLES_SetTexturePalette;
   240     renderer->GetTexturePalette = GLES_GetTexturePalette;
   237     renderer->GetTexturePalette = GLES_GetTexturePalette;
   241     renderer->SetTextureColorMod = GLES_SetTextureColorMod;
   238     renderer->SetTextureColorMod = GLES_SetTextureColorMod;
   242     renderer->SetTextureAlphaMod = GLES_SetTextureAlphaMod;
   239     renderer->SetTextureAlphaMod = GLES_SetTextureAlphaMod;
   243     renderer->SetTextureBlendMode = GLES_SetTextureBlendMode;
   240     renderer->SetTextureBlendMode = GLES_SetTextureBlendMode;
   244     renderer->SetTextureScaleMode = GLES_SetTextureScaleMode;
       
   245     renderer->UpdateTexture = GLES_UpdateTexture;
   241     renderer->UpdateTexture = GLES_UpdateTexture;
   246     renderer->LockTexture = GLES_LockTexture;
   242     renderer->LockTexture = GLES_LockTexture;
   247     renderer->UnlockTexture = GLES_UnlockTexture;
   243     renderer->UnlockTexture = GLES_UnlockTexture;
   248     renderer->DirtyTexture = GLES_DirtyTexture;
   244     renderer->DirtyTexture = GLES_DirtyTexture;
   249     renderer->RenderDrawPoints = GLES_RenderDrawPoints;
   245     renderer->RenderDrawPoints = GLES_RenderDrawPoints;
   447 
   443 
   448     data->format = format;
   444     data->format = format;
   449     data->formattype = type;
   445     data->formattype = type;
   450     renderdata->glBindTexture(data->type, data->texture);
   446     renderdata->glBindTexture(data->type, data->texture);
   451     renderdata->glTexParameteri(data->type, GL_TEXTURE_MIN_FILTER,
   447     renderdata->glTexParameteri(data->type, GL_TEXTURE_MIN_FILTER,
   452                                 GL_NEAREST);
   448                                 GL_LINEAR);
   453     renderdata->glTexParameteri(data->type, GL_TEXTURE_MAG_FILTER,
   449     renderdata->glTexParameteri(data->type, GL_TEXTURE_MAG_FILTER,
   454                                 GL_NEAREST);
   450                                 GL_LINEAR);
   455     renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_S,
   451     renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_S,
   456                                 GL_CLAMP_TO_EDGE);
   452                                 GL_CLAMP_TO_EDGE);
   457     renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_T,
   453     renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_T,
   458                                 GL_CLAMP_TO_EDGE);
   454                                 GL_CLAMP_TO_EDGE);
   459 
   455 
   528     case SDL_BLENDMODE_MOD:
   524     case SDL_BLENDMODE_MOD:
   529         return 0;
   525         return 0;
   530     default:
   526     default:
   531         SDL_Unsupported();
   527         SDL_Unsupported();
   532         texture->blendMode = SDL_BLENDMODE_NONE;
   528         texture->blendMode = SDL_BLENDMODE_NONE;
   533         return -1;
       
   534     }
       
   535 }
       
   536 
       
   537 static int
       
   538 GLES_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture)
       
   539 {
       
   540     switch (texture->scaleMode) {
       
   541     case SDL_SCALEMODE_NONE:
       
   542     case SDL_SCALEMODE_FAST:
       
   543     case SDL_SCALEMODE_SLOW:
       
   544         return 0;
       
   545     case SDL_SCALEMODE_BEST:
       
   546         SDL_Unsupported();
       
   547         texture->scaleMode = SDL_SCALEMODE_SLOW;
       
   548         return -1;
       
   549     default:
       
   550         SDL_Unsupported();
       
   551         texture->scaleMode = SDL_SCALEMODE_NONE;
       
   552         return -1;
   529         return -1;
   553     }
   530     }
   554 }
   531 }
   555 
   532 
   556 static int
   533 static int
   876         data->glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
   853         data->glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
   877     }
   854     }
   878 
   855 
   879     GLES_SetBlendMode(data, texture->blendMode, 0);
   856     GLES_SetBlendMode(data, texture->blendMode, 0);
   880 
   857 
   881     switch (texture->scaleMode) {
       
   882     case SDL_SCALEMODE_NONE:
       
   883     case SDL_SCALEMODE_FAST:
       
   884         data->glTexParameteri(texturedata->type, GL_TEXTURE_MIN_FILTER,
       
   885                               GL_NEAREST);
       
   886         data->glTexParameteri(texturedata->type, GL_TEXTURE_MAG_FILTER,
       
   887                               GL_NEAREST);
       
   888         break;
       
   889     case SDL_SCALEMODE_SLOW:
       
   890     case SDL_SCALEMODE_BEST:
       
   891         data->glTexParameteri(texturedata->type, GL_TEXTURE_MIN_FILTER,
       
   892                               GL_LINEAR);
       
   893         data->glTexParameteri(texturedata->type, GL_TEXTURE_MAG_FILTER,
       
   894                               GL_LINEAR);
       
   895         break;
       
   896     }
       
   897 
       
   898     if (data->GL_OES_draw_texture_supported && data->useDrawTexture) {
   858     if (data->GL_OES_draw_texture_supported && data->useDrawTexture) {
   899         /* this code is a little funny because the viewport is upside down vs SDL's coordinate system */
   859         /* this code is a little funny because the viewport is upside down vs SDL's coordinate system */
   900         SDL_Window *window = renderer->window;
   860         SDL_Window *window = renderer->window;
   901         GLint cropRect[4];
   861         GLint cropRect[4];
   902         cropRect[0] = srcrect->x;
   862         cropRect[0] = srcrect->x;