Mercurial > repos > blastem
comparison nuklear_ui/nuklear_sdl_gles2.h @ 2309:5e34369ed6be
Fix DPI scaling when OpenGL is enabled
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 27 Mar 2023 21:55:22 -0700 |
parents | b7768c58f0da |
children | 523ab225815b |
comparison
equal
deleted
inserted
replaced
2308:b7768c58f0da | 2309:5e34369ed6be |
---|---|
192 | 192 |
193 NK_API void | 193 NK_API void |
194 nk_sdl_render(enum nk_anti_aliasing AA, int max_vertex_buffer, int max_element_buffer) | 194 nk_sdl_render(enum nk_anti_aliasing AA, int max_vertex_buffer, int max_element_buffer) |
195 { | 195 { |
196 struct nk_sdl_device *dev = &sdl.ogl; | 196 struct nk_sdl_device *dev = &sdl.ogl; |
197 int width, height; | |
198 int display_width, display_height; | 197 int display_width, display_height; |
199 struct nk_vec2 scale; | 198 struct nk_vec2 scale; |
200 GLfloat ortho[4][4] = { | 199 GLfloat ortho[4][4] = { |
201 {2.0f, 0.0f, 0.0f, 0.0f}, | 200 {2.0f, 0.0f, 0.0f, 0.0f}, |
202 {0.0f,-2.0f, 0.0f, 0.0f}, | 201 {0.0f,-2.0f, 0.0f, 0.0f}, |
203 {0.0f, 0.0f,-1.0f, 0.0f}, | 202 {0.0f, 0.0f,-1.0f, 0.0f}, |
204 {-1.0f,1.0f, 0.0f, 1.0f}, | 203 {-1.0f,1.0f, 0.0f, 1.0f}, |
205 }; | 204 }; |
206 SDL_GetWindowSize(sdl.win, &width, &height); | |
207 SDL_GL_GetDrawableSize(sdl.win, &display_width, &display_height); | 205 SDL_GL_GetDrawableSize(sdl.win, &display_width, &display_height); |
208 ortho[0][0] /= (GLfloat)width; | 206 ortho[0][0] /= (GLfloat)display_width; |
209 ortho[1][1] /= (GLfloat)height; | 207 ortho[1][1] /= (GLfloat)display_height; |
210 | 208 |
211 scale.x = (float)display_width/(float)width; | 209 scale.x = 1.0f; |
212 scale.y = (float)display_height/(float)height; | 210 scale.y = 1.0f; |
213 | 211 |
214 /* setup global state */ | 212 /* setup global state */ |
215 glViewport(0,0,display_width,display_height); | 213 glViewport(0,0,display_width,display_height); |
216 glEnable(GL_BLEND); | 214 glEnable(GL_BLEND); |
217 glBlendEquation(GL_FUNC_ADD); | 215 glBlendEquation(GL_FUNC_ADD); |
287 /* iterate over and execute each draw command */ | 285 /* iterate over and execute each draw command */ |
288 nk_draw_foreach(cmd, &sdl.ctx, &dev->cmds) { | 286 nk_draw_foreach(cmd, &sdl.ctx, &dev->cmds) { |
289 if (!cmd->elem_count) continue; | 287 if (!cmd->elem_count) continue; |
290 glBindTexture(GL_TEXTURE_2D, (GLuint)cmd->texture.id); | 288 glBindTexture(GL_TEXTURE_2D, (GLuint)cmd->texture.id); |
291 glScissor((GLint)(cmd->clip_rect.x * scale.x), | 289 glScissor((GLint)(cmd->clip_rect.x * scale.x), |
292 (GLint)((height - (GLint)(cmd->clip_rect.y + cmd->clip_rect.h)) * scale.y), | 290 (GLint)((display_height - (GLint)(cmd->clip_rect.y + cmd->clip_rect.h)) * scale.y), |
293 (GLint)(cmd->clip_rect.w * scale.x), | 291 (GLint)(cmd->clip_rect.w * scale.x), |
294 (GLint)(cmd->clip_rect.h * scale.y)); | 292 (GLint)(cmd->clip_rect.h * scale.y)); |
295 glDrawElements(GL_TRIANGLES, (GLsizei)cmd->elem_count, GL_UNSIGNED_SHORT, offset); | 293 glDrawElements(GL_TRIANGLES, (GLsizei)cmd->elem_count, GL_UNSIGNED_SHORT, offset); |
296 offset += cmd->elem_count; | 294 offset += cmd->elem_count; |
297 } | 295 } |