From e73d5db104f4569a062736332ebe88b2e37a814b Mon Sep 17 00:00:00 2001 From: cxl Date: Mon, 7 Jan 2019 19:20:35 +0000 Subject: [PATCH] GLDraw: Fixed binding issue with RX580 git-svn-id: svn://ultimatepp.org/upp/trunk@12650 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/GLDraw/Code.cpp | 3 ++- uppsrc/GLDraw/GLDraw.h | 3 +++ uppsrc/GLDraw/GLShaders.cpp | 20 +++++++++++++++----- uppsrc/GLDraw/TDrawGL.cpp | 3 --- uppsrc/GLDraw/Triangles.cpp | 10 ++-------- 5 files changed, 22 insertions(+), 17 deletions(-) diff --git a/uppsrc/GLDraw/Code.cpp b/uppsrc/GLDraw/Code.cpp index 38f01986a..dcbe36d44 100644 --- a/uppsrc/GLDraw/Code.cpp +++ b/uppsrc/GLDraw/Code.cpp @@ -4,7 +4,7 @@ namespace Upp { GLCode::GLCode(const char *vertex_shader, const char *pixel_shader) { - Create(vertex_shader, pixel_shader); + Compile(vertex_shader, pixel_shader); Vector> ins; CParser p(vertex_shader); int ii = 0; @@ -36,6 +36,7 @@ GLCode::GLCode(const char *vertex_shader, const char *pixel_shader) } else p.SkipTerm(); + Link(); } GLCode& GLCode::Uniform(int i, double a) diff --git a/uppsrc/GLDraw/GLDraw.h b/uppsrc/GLDraw/GLDraw.h index 9624d1400..af8d68c97 100644 --- a/uppsrc/GLDraw/GLDraw.h +++ b/uppsrc/GLDraw/GLDraw.h @@ -47,6 +47,9 @@ protected: GLuint program; int64 serialid; + void Compile(const char *vertex_shader_, const char *fragment_shader_); + void Link(); + public: void Create(const char *vertex_shader, const char *fragment_shader, Tuple2 *bind_attr = NULL, int bind_count = 0); diff --git a/uppsrc/GLDraw/GLShaders.cpp b/uppsrc/GLDraw/GLShaders.cpp index 03ef685dc..309b24b13 100644 --- a/uppsrc/GLDraw/GLShaders.cpp +++ b/uppsrc/GLDraw/GLShaders.cpp @@ -33,8 +33,7 @@ static GLuint LoadShader(const char *src, GLenum type) { return shader; } -void GLProgram::Create(const char *vertex_shader_, const char *fragment_shader_, - Tuple2 *bind_attr, int bind_count) +void GLProgram::Compile(const char *vertex_shader_, const char *fragment_shader_) { Clear(); @@ -45,10 +44,10 @@ void GLProgram::Create(const char *vertex_shader_, const char *fragment_shader_, glAttachShader(program, vertex_shader); glAttachShader(program, fragment_shader); - - for(int i = 0; i < bind_count; i++) - glBindAttribLocation(program, bind_attr[i].a, bind_attr[i].b); +} +void GLProgram::Link() +{ glLinkProgram(program); GLint linked; @@ -65,6 +64,17 @@ void GLProgram::Create(const char *vertex_shader_, const char *fragment_shader_, Panic("Failed to link"); Clear(); } +} + +void GLProgram::Create(const char *vertex_shader_, const char *fragment_shader_, + Tuple2 *bind_attr, int bind_count) +{ + Compile(vertex_shader_, fragment_shader_); + + for(int i = 0; i < bind_count; i++) + glBindAttribLocation(program, bind_attr[i].a, bind_attr[i].b); + + Link(); Use(); } diff --git a/uppsrc/GLDraw/TDrawGL.cpp b/uppsrc/GLDraw/TDrawGL.cpp index 39c613075..f3764fa5f 100644 --- a/uppsrc/GLDraw/TDrawGL.cpp +++ b/uppsrc/GLDraw/TDrawGL.cpp @@ -14,9 +14,6 @@ void DrawGL::Init(Size sz, double alpha) SyncScissor(); prev = Point(0, 0); path_done = false; - DLOG("DrawGL::Init"); - DDUMP(dd.vs); - DDUMP(dd.off); } DrawGL::~DrawGL() diff --git a/uppsrc/GLDraw/Triangles.cpp b/uppsrc/GLDraw/Triangles.cpp index e6f19d8d1..9c2d5af55 100644 --- a/uppsrc/GLDraw/Triangles.cpp +++ b/uppsrc/GLDraw/Triangles.cpp @@ -24,7 +24,6 @@ void GLTriangles::Draw(const GLContext2D& dd) void main() { gl_FragColor = v_color; - gl_FragColor = vec4(0, 1, 0, 1); } )"); @@ -36,14 +35,9 @@ void GLTriangles::Draw(const GLContext2D& dd) va.Add(color, 3); va.Index(elements); - DDUMP(pos); - DDUMP(color); - DDUMP(elements); - -// glEnable(GL_BLEND); + glEnable(GL_BLEND); glDisable(GL_CULL_FACE); -// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDisable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable(GL_DEPTH_TEST); // glDepthFunc(GL_LEQUAL);