Skip to content

Commit

Permalink
GLES fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
wjakob committed Feb 21, 2020
1 parent 8fb7965 commit 741f332
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 5 deletions.
17 changes: 17 additions & 0 deletions resources/imageview_fragment.gles
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
precision highp float;

varying vec2 uv;
varying vec2 position_background;
uniform sampler2D image;
uniform vec4 background_color;

void main() {
vec2 frac = position_background - floor(position_background);
float checkerboard = ((frac.x > .5) == (frac.y > .5)) ? 0.4 : 0.5;

vec4 background = (1.0 - background_color.a) * vec4(vec3(checkerboard), 1.0) +
background_color.a * vec4(background_color.rgb, 1.0);

vec4 value = texture2D(image, uv);
gl_FragColor = (1.0 - value.a) * background + value.a * vec4(value.rgb, 1.0);
}
14 changes: 14 additions & 0 deletions resources/imageview_vertex.gles
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
precision highp float;

uniform mat4 matrix_image;
uniform mat4 matrix_background;
attribute vec2 position;
varying vec2 position_background;
varying vec2 uv;

void main() {
vec4 p = vec4(position, 0.0, 1.0);
gl_Position = matrix_image * p;
position_background = (matrix_background * p).xy;
uv = position;
}
4 changes: 3 additions & 1 deletion src/example1.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -577,14 +577,16 @@ int main(int /* argc */, char ** /* argv */) {
}

nanogui::shutdown();
} catch (const std::runtime_error &e) {
} catch (const std::exception &e) {
std::string error_msg = std::string("Caught a fatal error: ") + std::string(e.what());
#if defined(_WIN32)
MessageBoxA(nullptr, error_msg.c_str(), NULL, MB_ICONERROR | MB_OK);
#else
std::cerr << error_msg << std::endl;
#endif
return -1;
} catch (...) {
std::cerr << "Caught an unknown error!" << std::endl;
}

return 0;
Expand Down
6 changes: 4 additions & 2 deletions src/shader_gl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -248,9 +248,9 @@ Shader::Shader(RenderPass *render_pass,

#if defined(NANOGUI_USE_OPENGL)
CHK(glGenVertexArrays(1, &m_vertex_array_handle));
#endif

m_uses_point_size = vertex_shader.find("gl_PointSize") != std::string::npos;
#endif
}

Shader::~Shader() {
Expand Down Expand Up @@ -511,16 +511,18 @@ void Shader::begin() {
CHK(glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA));
}

#if defined(NANOGUI_USE_OPENGL)
if (m_uses_point_size)
CHK(glEnable(GL_PROGRAM_POINT_SIZE));
#endif
}

void Shader::end() {
if (m_blend_mode == BlendMode::AlphaBlend)
CHK(glDisable(GL_BLEND));
#if defined(NANOGUI_USE_OPENGL)
if (m_uses_point_size)
CHK(glDisable(GL_PROGRAM_POINT_SIZE));
#if defined(NANOGUI_USE_OPENGL)
CHK(glBindVertexArray(0));
#else
for (const auto &[key, buf] : m_buffers) {
Expand Down
6 changes: 4 additions & 2 deletions src/texture_gl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -156,14 +156,16 @@ void Texture::upload(const uint8_t *data) {
GLenum tex_mode = m_samples > 1 ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D;
CHK(glBindTexture(tex_mode, m_texture_handle));

if (data) {
if (data)
CHK(glPixelStorei(GL_UNPACK_ALIGNMENT, 1));

#if defined(NANOGUI_USE_OPENGL)
if (data) {
CHK(glPixelStorei(GL_UNPACK_ROW_LENGTH, 0));
CHK(glPixelStorei(GL_UNPACK_SKIP_ROWS, 0));
CHK(glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0));
}

#if defined(NANOGUI_USE_OPENGL)
if (m_samples == 1)
CHK(glTexImage2D(tex_mode, 0, internal_format_gl, (GLsizei) m_size.x(),
(GLsizei) m_size.y(), 0, pixel_format_gl, component_format_gl, data));
Expand Down

0 comments on commit 741f332

Please sign in to comment.