/kivy/graphics/__init__.py
https://github.com/akshayaurora/kivy · Python · 121 lines · 61 code · 9 blank · 51 comment · 10 complexity · 757bfa7c3c5c835648262950f64a61ea MD5 · raw file
- '''
- Graphics
- ========
- This package assembles many low level functions used for drawing. The whole
- graphics package is compatible with OpenGL ES 2.0 and has many rendering
- optimizations.
- The basics
- ----------
- For drawing on a screen, you will need :
- 1. a :class:`~kivy.graphics.instructions.Canvas` object.
- 2. :class:`~kivy.graphics.instructions.Instruction` objects.
- Each :class:`~kivy.uix.widget.Widget`
- in Kivy already has a :class:`Canvas` by default. When you create
- a widget, you can create all the instructions needed for drawing. If
- `self` is your current widget, you can do::
- from kivy.graphics import *
- with self.canvas:
- # Add a red color
- Color(1., 0, 0)
- # Add a rectangle
- Rectangle(pos=(10, 10), size=(500, 500))
- The instructions :class:`Color` and :class:`Rectangle` are automatically added
- to the canvas object and will be used when the window is drawn.
- .. note::
- Kivy drawing instructions are not automatically relative to the position
- or size of the widget. You, therefore, need to consider these factors when
- drawing. In order to make your drawing instructions relative to the widget,
- the instructions need either to be
- declared in the :mod:`KvLang <kivy.lang>` or bound to pos and size changes.
- Please see :ref:`adding_widget_background` for more detail.
- GL Reloading mechanism
- ----------------------
- .. versionadded:: 1.2.0
- During the lifetime of the application, the OpenGL context might be lost. This
- happens:
- - when the window is resized on OS X or the Windows platform and you're
- using pygame as a window provider. This is due to SDL 1.2. In the SDL 1.2
- design, it needs to recreate a GL context everytime the window is
- resized. This was fixed in SDL 1.3 but pygame is not yet available on it
- by default.
- - when Android releases the app resources: when your application goes to the
- background, Android might reclaim your opengl context to give the
- resource to another app. When the user switches back to your application, a
- newly created gl context is given to your app.
- Starting from 1.2.0, we have introduced a mechanism for reloading all the
- graphics resources using the GPU: Canvas, FBO, Shader, Texture, VBO,
- and VertexBatch:
- - VBO and VertexBatch are constructed by our graphics instructions. We have all
- the data needed to reconstruct when reloading.
- - Shader: same as VBO, we store the source and values used in the
- shader so we are able to recreate the vertex/fragment/program.
- - Texture: if the texture has a source (an image file or atlas), the image
- is reloaded from the source and reuploaded to the GPU.
- You should cover these cases yourself:
- - Textures without a source: if you manually created a texture and manually
- blit data / a buffer to it, you must handle the reloading yourself. Check the
- :doc:`api-kivy.graphics.texture` to learn how to manage that case. (The text
- rendering already generates the texture and handles the reloading. You
- don't need to reload text yourself.)
- - FBO: if you added / removed / drew things multiple times on the FBO, we
- can't reload it. We don't keep a history of the instructions put on it.
- As for textures without a source, check the :doc:`api-kivy.graphics.fbo` to
- learn how to manage that case.
- '''
- from kivy.graphics.instructions import Callback, Canvas, CanvasBase, \
- ContextInstruction, Instruction, InstructionGroup, RenderContext, \
- VertexInstruction
- from kivy.graphics.context_instructions import BindTexture, Color, \
- PushState, ChangeState, PopState, MatrixInstruction, ApplyContextMatrix, \
- PopMatrix, PushMatrix, Rotate, Scale, Translate, LoadIdentity, \
- UpdateNormalMatrix, gl_init_resources
- from kivy.graphics.vertex_instructions import Bezier, BorderImage, Ellipse, \
- GraphicException, Line, Mesh, Point, Quad, Rectangle, RoundedRectangle, \
- Triangle, SmoothLine
- from kivy.graphics.stencil_instructions import StencilPop, StencilPush, \
- StencilUse, StencilUnUse
- from kivy.graphics.gl_instructions import ClearColor, ClearBuffers
- from kivy.graphics.fbo import Fbo
- from kivy.graphics.scissor_instructions import ScissorPush, ScissorPop
- # very hacky way to avoid pyflakes warning...
- __all__ = (Bezier.__name__, BindTexture.__name__, BorderImage.__name__,
- Callback.__name__, Canvas.__name__, CanvasBase.__name__,
- Color.__name__, ContextInstruction.__name__,
- Ellipse.__name__, Fbo.__name__, GraphicException.__name__,
- Instruction.__name__, InstructionGroup.__name__,
- Line.__name__, SmoothLine.__name__, MatrixInstruction.__name__,
- Mesh.__name__, Point.__name__, PopMatrix.__name__,
- PushMatrix.__name__, Quad.__name__, Rectangle.__name__,
- RenderContext.__name__, Rotate.__name__, Scale.__name__,
- StencilPop.__name__, StencilPush.__name__, StencilUse.__name__,
- StencilUnUse.__name__, Translate.__name__, Triangle.__name__,
- VertexInstruction.__name__, ClearColor.__name__,
- ClearBuffers.__name__, gl_init_resources.__name__,
- PushState.__name__, ChangeState.__name__, PopState.__name__,
- ApplyContextMatrix.__name__, UpdateNormalMatrix.__name__,
- LoadIdentity.__name__)