diff options
Diffstat (limited to 'doc/python_api/examples/gpu.7.py')
-rw-r--r-- | doc/python_api/examples/gpu.7.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/doc/python_api/examples/gpu.7.py b/doc/python_api/examples/gpu.7.py new file mode 100644 index 00000000000..9f5fb4f5459 --- /dev/null +++ b/doc/python_api/examples/gpu.7.py @@ -0,0 +1,49 @@ +""" +2D Image +-------- +""" +import bpy +import gpu +import bgl +from gpu_extras.batch import batch_for_shader + +IMAGE_NAME = "Untitled" +image = bpy.data.images[IMAGE_NAME] + +coords = [ + (100, 100), (200, 100), + (100, 200), (200, 200)] + +uvs = [(0, 0), (1, 0), (0, 1), (1, 1)] + +indices = [(0, 1, 2), (2, 1, 3)] + +shader = gpu.shader.from_builtin('2D_IMAGE') +batch = batch_for_shader(shader, 'TRIS', + {"pos" : coords, + "texCoord" : uvs}, + indices=indices) + +# send image to gpu if it isn't there already +if image.gl_load(): + raise Exception() + +# texture identifier on gpu +texture_id = image.bindcode + +def draw(): + # in case someone disabled it before + bgl.glEnable(bgl.GL_TEXTURE_2D) + + # bind texture to image unit 0 + bgl.glActiveTexture(bgl.GL_TEXTURE0) + bgl.glBindTexture(bgl.GL_TEXTURE_2D, texture_id) + + shader.bind() + # tell shader to use the image that is bound to image unit 0 + shader.uniform_int("image", 0) + batch.draw(shader) + + bgl.glDisable(bgl.GL_TEXTURE_2D) + +bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_PIXEL')
\ No newline at end of file |