mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 16:50:06 +00:00 
			
		
		
		
	Geo line requires two projection matrices
This commit is contained in:
		
							parent
							
								
									4aad9fd3d4
								
							
						
					
					
						commit
						5ae098daff
					
				
					 2 changed files with 15 additions and 4 deletions
				
			
		|  | @ -12,6 +12,7 @@ layout (location = 2) in vec2 aTexCoord; | ||||||
| layout (location = 3) in vec4 aModulate; | layout (location = 3) in vec4 aModulate; | ||||||
| 
 | 
 | ||||||
| uniform mat4 uMVPMatrix; | uniform mat4 uMVPMatrix; | ||||||
|  | uniform mat4 uMapMatrix; | ||||||
| uniform vec2 uMapScreenCoord; | uniform vec2 uMapScreenCoord; | ||||||
| 
 | 
 | ||||||
| flat out vec2 texCoord; | flat out vec2 texCoord; | ||||||
|  | @ -32,8 +33,9 @@ void main() | ||||||
|    texCoord = aTexCoord; |    texCoord = aTexCoord; | ||||||
|    modulate = aModulate; |    modulate = aModulate; | ||||||
| 
 | 
 | ||||||
|    vec2 p = latLngToScreenCoordinate(aLatLong) + aXYOffset - uMapScreenCoord; |    vec2 p = latLngToScreenCoordinate(aLatLong) - uMapScreenCoord; | ||||||
| 
 | 
 | ||||||
|    // Transform the position to screen coordinates |    // Transform the position to screen coordinates | ||||||
|    gl_Position = uMVPMatrix * vec4(p, 0.0f, 1.0f); |    gl_Position = uMapMatrix * vec4(p, 0.0f, 1.0f) - | ||||||
|  |                  uMVPMatrix * vec4(aXYOffset, 0.0f, 0.0f); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -36,6 +36,7 @@ public: | ||||||
|        modulateColor_ {std::nullopt}, |        modulateColor_ {std::nullopt}, | ||||||
|        shaderProgram_ {nullptr}, |        shaderProgram_ {nullptr}, | ||||||
|        uMVPMatrixLocation_(GL_INVALID_INDEX), |        uMVPMatrixLocation_(GL_INVALID_INDEX), | ||||||
|  |        uMapMatrixLocation_(GL_INVALID_INDEX), | ||||||
|        uMapScreenCoordLocation_(GL_INVALID_INDEX), |        uMapScreenCoordLocation_(GL_INVALID_INDEX), | ||||||
|        vao_ {GL_INVALID_INDEX}, |        vao_ {GL_INVALID_INDEX}, | ||||||
|        vbo_ {GL_INVALID_INDEX} |        vbo_ {GL_INVALID_INDEX} | ||||||
|  | @ -58,6 +59,7 @@ public: | ||||||
| 
 | 
 | ||||||
|    std::shared_ptr<ShaderProgram> shaderProgram_; |    std::shared_ptr<ShaderProgram> shaderProgram_; | ||||||
|    GLint                          uMVPMatrixLocation_; |    GLint                          uMVPMatrixLocation_; | ||||||
|  |    GLint                          uMapMatrixLocation_; | ||||||
|    GLint                          uMapScreenCoordLocation_; |    GLint                          uMapScreenCoordLocation_; | ||||||
| 
 | 
 | ||||||
|    GLuint vao_; |    GLuint vao_; | ||||||
|  | @ -66,7 +68,6 @@ public: | ||||||
|    void Update(); |    void Update(); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // TODO: OpenGL context with shaders
 |  | ||||||
| GeoLine::GeoLine(std::shared_ptr<GlContext> context) : | GeoLine::GeoLine(std::shared_ptr<GlContext> context) : | ||||||
|     DrawItem(context->gl()), p(std::make_unique<Impl>(context)) |     DrawItem(context->gl()), p(std::make_unique<Impl>(context)) | ||||||
| { | { | ||||||
|  | @ -90,6 +91,13 @@ void GeoLine::Initialize() | ||||||
|       logger_->warn("Could not find uMVPMatrix"); |       logger_->warn("Could not find uMVPMatrix"); | ||||||
|    } |    } | ||||||
| 
 | 
 | ||||||
|  |    p->uMapMatrixLocation_ = | ||||||
|  |       gl.glGetUniformLocation(p->shaderProgram_->id(), "uMapMatrix"); | ||||||
|  |    if (p->uMapMatrixLocation_ == -1) | ||||||
|  |    { | ||||||
|  |       logger_->warn("Could not find uMapMatrix"); | ||||||
|  |    } | ||||||
|  | 
 | ||||||
|    p->uMapScreenCoordLocation_ = |    p->uMapScreenCoordLocation_ = | ||||||
|       gl.glGetUniformLocation(p->shaderProgram_->id(), "uMapScreenCoord"); |       gl.glGetUniformLocation(p->shaderProgram_->id(), "uMapScreenCoord"); | ||||||
|    if (p->uMapScreenCoordLocation_ == -1) |    if (p->uMapScreenCoordLocation_ == -1) | ||||||
|  | @ -155,8 +163,9 @@ void GeoLine::Render(const QMapbox::CustomLayerRenderParameters& params) | ||||||
| 
 | 
 | ||||||
|       p->Update(); |       p->Update(); | ||||||
|       p->shaderProgram_->Use(); |       p->shaderProgram_->Use(); | ||||||
|  |       UseDefaultProjection(params, p->uMVPMatrixLocation_); | ||||||
|       UseMapProjection( |       UseMapProjection( | ||||||
|          params, p->uMVPMatrixLocation_, p->uMapScreenCoordLocation_); |          params, p->uMapMatrixLocation_, p->uMapScreenCoordLocation_); | ||||||
| 
 | 
 | ||||||
|       // Draw line
 |       // Draw line
 | ||||||
|       gl.glDrawArrays(GL_TRIANGLES, 0, 6); |       gl.glDrawArrays(GL_TRIANGLES, 0, 6); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat