gles2: allow to specify texture target type
Allow to set the texture target type when generating/binding the texture. This allows us to attach the texture type to the texture so we don't have to keep the logic elsewhere.
This commit is contained in:
		
							parent
							
								
									453516a621
								
							
						
					
					
						commit
						b3cb5a36c7
					
				|  | @ -37,6 +37,7 @@ struct wlr_gles2_texture { | ||||||
| 	GLuint tex_id; | 	GLuint tex_id; | ||||||
| 	const struct pixel_format *pixel_format; | 	const struct pixel_format *pixel_format; | ||||||
| 	EGLImageKHR image; | 	EGLImageKHR image; | ||||||
|  | 	GLenum target; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| struct shaders { | struct shaders { | ||||||
|  |  | ||||||
|  | @ -22,14 +22,16 @@ static struct pixel_format external_pixel_format = { | ||||||
| 	.shader = &shaders.external | 	.shader = &shaders.external | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static void gles2_texture_ensure_texture(struct wlr_gles2_texture *texture) { | static void gles2_texture_ensure_texture(struct wlr_gles2_texture *texture, | ||||||
|  | 		GLenum target) { | ||||||
| 	if (texture->tex_id) { | 	if (texture->tex_id) { | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
|  | 	texture->target = target; | ||||||
| 	GL_CALL(glGenTextures(1, &texture->tex_id)); | 	GL_CALL(glGenTextures(1, &texture->tex_id)); | ||||||
| 	GL_CALL(glBindTexture(GL_TEXTURE_2D, texture->tex_id)); | 	GL_CALL(glBindTexture(target, texture->tex_id)); | ||||||
| 	GL_CALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)); | 	GL_CALL(glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)); | ||||||
| 	GL_CALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)); | 	GL_CALL(glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static bool gles2_texture_upload_pixels(struct wlr_texture *_texture, | static bool gles2_texture_upload_pixels(struct wlr_texture *_texture, | ||||||
|  | @ -47,7 +49,7 @@ static bool gles2_texture_upload_pixels(struct wlr_texture *_texture, | ||||||
| 	texture->wlr_texture.format = format; | 	texture->wlr_texture.format = format; | ||||||
| 	texture->pixel_format = fmt; | 	texture->pixel_format = fmt; | ||||||
| 
 | 
 | ||||||
| 	gles2_texture_ensure_texture(texture); | 	gles2_texture_ensure_texture(texture, GL_TEXTURE_2D); | ||||||
| 	GL_CALL(glBindTexture(GL_TEXTURE_2D, texture->tex_id)); | 	GL_CALL(glBindTexture(GL_TEXTURE_2D, texture->tex_id)); | ||||||
| 	GL_CALL(glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT, stride)); | 	GL_CALL(glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT, stride)); | ||||||
| 	GL_CALL(glTexImage2D(GL_TEXTURE_2D, 0, fmt->gl_format, width, height, 0, | 	GL_CALL(glTexImage2D(GL_TEXTURE_2D, 0, fmt->gl_format, width, height, 0, | ||||||
|  | @ -100,7 +102,7 @@ static bool gles2_texture_upload_shm(struct wlr_texture *_texture, | ||||||
| 	texture->wlr_texture.format = format; | 	texture->wlr_texture.format = format; | ||||||
| 	texture->pixel_format = fmt; | 	texture->pixel_format = fmt; | ||||||
| 
 | 
 | ||||||
| 	gles2_texture_ensure_texture(texture); | 	gles2_texture_ensure_texture(texture, GL_TEXTURE_2D); | ||||||
| 	GL_CALL(glBindTexture(GL_TEXTURE_2D, texture->tex_id)); | 	GL_CALL(glBindTexture(GL_TEXTURE_2D, texture->tex_id)); | ||||||
| 	GL_CALL(glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT, pitch)); | 	GL_CALL(glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT, pitch)); | ||||||
| 	GL_CALL(glPixelStorei(GL_UNPACK_SKIP_PIXELS_EXT, 0)); | 	GL_CALL(glPixelStorei(GL_UNPACK_SKIP_PIXELS_EXT, 0)); | ||||||
|  | @ -185,9 +187,8 @@ static bool gles2_texture_upload_drm(struct wlr_texture *_tex, | ||||||
| 		return false; | 		return false; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	gles2_texture_ensure_texture(tex); | 	gles2_texture_ensure_texture(tex, target); | ||||||
| 	GL_CALL(glBindTexture(GL_TEXTURE_2D, tex->tex_id)); | 	GL_CALL(glBindTexture(GL_TEXTURE_2D, tex->tex_id)); | ||||||
| 
 |  | ||||||
| 	EGLint attribs[] = { EGL_WAYLAND_PLANE_WL, 0, EGL_NONE }; | 	EGLint attribs[] = { EGL_WAYLAND_PLANE_WL, 0, EGL_NONE }; | ||||||
| 
 | 
 | ||||||
| 	if (tex->image) { | 	if (tex->image) { | ||||||
|  | @ -220,7 +221,7 @@ static bool gles2_texture_upload_eglimage(struct wlr_texture *wlr_tex, | ||||||
| 	tex->wlr_texture.width = width; | 	tex->wlr_texture.width = width; | ||||||
| 	tex->wlr_texture.height = height; | 	tex->wlr_texture.height = height; | ||||||
| 
 | 
 | ||||||
| 	gles2_texture_ensure_texture(tex); | 	gles2_texture_ensure_texture(tex, GL_TEXTURE_2D); | ||||||
| 
 | 
 | ||||||
| 	GL_CALL(glActiveTexture(GL_TEXTURE0)); | 	GL_CALL(glActiveTexture(GL_TEXTURE0)); | ||||||
| 	GL_CALL(glBindTexture(GL_TEXTURE_EXTERNAL_OES, tex->tex_id)); | 	GL_CALL(glBindTexture(GL_TEXTURE_EXTERNAL_OES, tex->tex_id)); | ||||||
|  | @ -254,7 +255,7 @@ static bool gles2_texture_upload_dmabuf(struct wlr_texture *_tex, | ||||||
| 	GLenum target = GL_TEXTURE_2D; | 	GLenum target = GL_TEXTURE_2D; | ||||||
| 	const struct pixel_format *pf = | 	const struct pixel_format *pf = | ||||||
| 		gl_format_for_wl_format(WL_SHM_FORMAT_ARGB8888); | 		gl_format_for_wl_format(WL_SHM_FORMAT_ARGB8888); | ||||||
| 	gles2_texture_ensure_texture(tex); | 	gles2_texture_ensure_texture(tex, target); | ||||||
| 	GL_CALL(glBindTexture(target, tex->tex_id)); | 	GL_CALL(glBindTexture(target, tex->tex_id)); | ||||||
| 	tex->image = wlr_egl_create_image_from_dmabuf(tex->egl, &dmabuf->attributes); | 	tex->image = wlr_egl_create_image_from_dmabuf(tex->egl, &dmabuf->attributes); | ||||||
| 	GL_CALL(glActiveTexture(GL_TEXTURE0)); | 	GL_CALL(glActiveTexture(GL_TEXTURE0)); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue