''' 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 ` 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__)