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 }