Thanks @Pkeod, although I solved the issue differently, you made me thinking in the right direction.
So when initializing the buffer rendering target I replaced render.get_window_width/height
with render.get_width
. This is important - so that the buffer is created in the same resolution as the target resolution of the app, regardless of the window’s physical size on the screen:
local color_params = { format = render.FORMAT_RGBA,
width = render.get_width(),
height = render.get_height() }
Then, when rendering to the off-screen buffer, I made sure to set the viewport to the same target resolution (see the line instead of the commented one):
render.set_depth_mask(true)
render.set_stencil_mask(0xff)
render.clear({[render.BUFFER_COLOR_BIT] = self.clear_color, [render.BUFFER_DEPTH_BIT] = 1, [render.BUFFER_STENCIL_BIT] = 0})
--render.set_viewport(0, 0, render.get_window_width(), render.get_window_height())
render.set_viewport(0, 0, render.get_width(), render.get_height())
render.set_view(self.view)
Finally, when texturing with the off-screen buffer to the final unit quad, I added setting viewport to the windows resolution on every update:
render.clear({[render.BUFFER_COLOR_BIT] = self.clear_color})
render.set_viewport(0, 0, render.get_window_width(), render.get_window_height())
render.set_view(vmath.matrix4())
render.set_projection(vmath.matrix4())