Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'doc/python_api/rst')
-rw-r--r--doc/python_api/rst/bge.constraints.rst4
-rw-r--r--doc/python_api/rst/bge.events.rst94
-rw-r--r--doc/python_api/rst/bge.logic.rst22
-rw-r--r--doc/python_api/rst/bge.render.rst61
-rw-r--r--doc/python_api/rst/bge.texture.rst748
-rw-r--r--doc/python_api/rst/bge_types/bge.types.BL_Shader.rst10
-rw-r--r--doc/python_api/rst/bge_types/bge.types.SCA_PythonJoystick.rst10
-rw-r--r--doc/python_api/rst/include__bmesh.rst11
-rw-r--r--doc/python_api/rst/info_quickstart.rst10
9 files changed, 732 insertions, 238 deletions
diff --git a/doc/python_api/rst/bge.constraints.rst b/doc/python_api/rst/bge.constraints.rst
index bf015057dcb..ed965c3dfc1 100644
--- a/doc/python_api/rst/bge.constraints.rst
+++ b/doc/python_api/rst/bge.constraints.rst
@@ -8,11 +8,11 @@ Physics Constraints (bge.constraints)
Examples
--------
-.. include:: ../examples/bge.constraints.py
+.. include:: __/examples/bge.constraints.py
:start-line: 1
:end-line: 4
-.. literalinclude:: ../examples/bge.constraints.py
+.. literalinclude:: __/examples/bge.constraints.py
:lines: 6-
diff --git a/doc/python_api/rst/bge.events.rst b/doc/python_api/rst/bge.events.rst
index 8dbded6a3fe..42135926fda 100644
--- a/doc/python_api/rst/bge.events.rst
+++ b/doc/python_api/rst/bge.events.rst
@@ -12,53 +12,53 @@ This module holds key constants for the SCA_KeyboardSensor.
.. code-block:: python
- # Set a connected keyboard sensor to accept F1
- import bge
-
- co = bge.logic.getCurrentController()
- # 'Keyboard' is a keyboard sensor
- sensor = co.sensors["Keyboard"]
- sensor.key = bge.events.F1KEY
-
-.. code-block:: python
-
- # Do the all keys thing
- import bge
-
- co = bge.logic.getCurrentController()
- # 'Keyboard' is a keyboard sensor
- sensor = co.sensors["Keyboard"]
-
- for key,status in sensor.events:
- # key[0] == bge.events.keycode, key[1] = status
- if status == bge.logic.KX_INPUT_JUST_ACTIVATED:
- if key == bge.events.WKEY:
- # Activate Forward!
- if key == bge.events.SKEY:
- # Activate Backward!
- if key == bge.events.AKEY:
- # Activate Left!
- if key == bge.events.DKEY:
- # Activate Right!
-
-.. code-block:: python
-
- # The all keys thing without a keyboard sensor (but you will
- # need an always sensor with pulse mode on)
- import bge
-
- # Just shortening names here
- keyboard = bge.logic.keyboard
- JUST_ACTIVATED = bge.logic.KX_INPUT_JUST_ACTIVATED
-
- if keyboard.events[bge.events.WKEY] == JUST_ACTIVATED:
- print("Activate Forward!")
- if keyboard.events[bge.events.SKEY] == JUST_ACTIVATED:
- print("Activate Backward!")
- if keyboard.events[bge.events.AKEY] == JUST_ACTIVATED:
- print("Activate Left!")
- if keyboard.events[bge.events.DKEY] == JUST_ACTIVATED:
- print("Activate Right!")
+ # Set a connected keyboard sensor to accept F1
+ import bge
+
+ co = bge.logic.getCurrentController()
+ # 'Keyboard' is a keyboard sensor
+ sensor = co.sensors["Keyboard"]
+ sensor.key = bge.events.F1KEY
+
+ code-block:: python
+
+ # Do the all keys thing
+ import bge
+
+ co = bge.logic.getCurrentController()
+ # 'Keyboard' is a keyboard sensor
+ sensor = co.sensors["Keyboard"]
+
+ for key,status in sensor.events:
+ # key[0] == bge.events.keycode, key[1] = status
+ if status == bge.logic.KX_INPUT_JUST_ACTIVATED:
+ if key == bge.events.WKEY:
+ # Activate Forward!
+ if key == bge.events.SKEY:
+ # Activate Backward!
+ if key == bge.events.AKEY:
+ # Activate Left!
+ if key == bge.events.DKEY:
+ # Activate Right!
+
+ code-block:: python
+
+ # The all keys thing without a keyboard sensor (but you will
+ # need an always sensor with pulse mode on)
+ import bge
+
+ # Just shortening names here
+ keyboard = bge.logic.keyboard
+ JUST_ACTIVATED = bge.logic.KX_INPUT_JUST_ACTIVATED
+
+ if keyboard.events[bge.events.WKEY] == JUST_ACTIVATED:
+ print("Activate Forward!")
+ if keyboard.events[bge.events.SKEY] == JUST_ACTIVATED:
+ print("Activate Backward!")
+ if keyboard.events[bge.events.AKEY] == JUST_ACTIVATED:
+ print("Activate Left!")
+ if keyboard.events[bge.events.DKEY] == JUST_ACTIVATED:
+ print("Activate Right!")
*********
diff --git a/doc/python_api/rst/bge.logic.rst b/doc/python_api/rst/bge.logic.rst
index 3f35901234a..5cdb8ebfee9 100644
--- a/doc/python_api/rst/bge.logic.rst
+++ b/doc/python_api/rst/bge.logic.rst
@@ -378,6 +378,28 @@ General functions
Render next frame (if Python has control)
+.. function:: setRender(render)
+
+ Sets the global flag that controls the render of the scene.
+ If True, the render is done after the logic frame.
+ If False, the render is skipped and another logic frame starts immediately.
+
+ .. note::
+
+ GPU VSync no longer limits the number of frame per second when render is off,
+ but the *Use Frame Rate* option still regulates the fps. To run as many frames
+ as possible, untick this option (Render Properties, System panel).
+
+ :arg render: the render flag
+ :type render: bool
+
+.. function:: getRender()
+
+ Get the current value of the global render flag
+
+ :return: The flag value
+ :rtype: bool
+
**********************
Time related functions
**********************
diff --git a/doc/python_api/rst/bge.render.rst b/doc/python_api/rst/bge.render.rst
index 3b565e294dd..02c3beef672 100644
--- a/doc/python_api/rst/bge.render.rst
+++ b/doc/python_api/rst/bge.render.rst
@@ -90,6 +90,48 @@ Constants
Right eye being used during stereoscopic rendering.
+.. data:: RAS_OFS_RENDER_BUFFER
+
+ The pixel buffer for offscreen render is a RenderBuffer. Argument to :func:`offScreenCreate`
+
+.. data:: RAS_OFS_RENDER_TEXTURE
+
+ The pixel buffer for offscreen render is a Texture. Argument to :func:`offScreenCreate`
+
+
+*****
+Types
+*****
+
+.. class:: RASOffScreen
+
+ An off-screen render buffer object.
+
+ Use :func:`offScreenCreate` to create it.
+ Currently it can only be used in the :class:`bge.texture.ImageRender`
+ constructor to render on a FBO rather than the default viewport.
+
+ .. attribute:: width
+
+ The width in pixel of the FBO
+
+ :type: integer
+
+ .. attribute:: height
+
+ The height in pixel of the FBO
+
+ :type: integer
+
+ .. attribute:: color
+
+ The underlying OpenGL bind code of the texture object that holds
+ the rendered image, 0 if the FBO is using RenderBuffer.
+ The choice between RenderBuffer and Texture is determined
+ by the target argument of :func:`offScreenCreate`.
+
+ :type: integer
+
*********
Functions
@@ -362,3 +404,22 @@ Functions
Get the current vsync value
:rtype: One of VSYNC_OFF, VSYNC_ON, VSYNC_ADAPTIVE
+
+.. function:: offScreenCreate(width,height[,samples=0][,target=bge.render.RAS_OFS_RENDER_BUFFER])
+
+ Create a Off-screen render buffer object.
+
+ :arg width: the width of the buffer in pixels
+ :type width: integer
+ :arg height: the height of the buffer in pixels
+ :type height: integer
+ :arg samples: the number of multisample for anti-aliasing (MSAA), 0 to disable MSAA
+ :type samples: integer
+ :arg target: the pixel storage: :data:`RAS_OFS_RENDER_BUFFER` to render on RenderBuffers (the default),
+ :data:`RAS_OFS_RENDER_TEXTURE` to render on texture.
+ The later is interesting if you want to access the texture directly (see :attr:`RASOffScreen.color`).
+ Otherwise the default is preferable as it's more widely supported by GPUs and more efficient.
+ If the GPU does not support MSAA+Texture (e.g. Intel HD GPU), MSAA will be disabled.
+ :type target: integer
+ :rtype: :class:`RASOffScreen`
+
diff --git a/doc/python_api/rst/bge.texture.rst b/doc/python_api/rst/bge.texture.rst
index 4588a3e1800..f5d325f7ce8 100644
--- a/doc/python_api/rst/bge.texture.rst
+++ b/doc/python_api/rst/bge.texture.rst
@@ -8,13 +8,16 @@ Introduction
The bge.texture module allows you to manipulate textures during the game.
-Several sources for texture are possible: video files, image files, video capture, memory buffer, camera render or a mix of that.
+Several sources for texture are possible: video files, image files, video capture, memory buffer,
+camera render or a mix of that.
The video and image files can be loaded from the internet using an URL instead of a file name.
-In addition, you can apply filters on the images before sending them to the GPU, allowing video effect: blue screen, color band, gray, normal map.
+In addition, you can apply filters on the images before sending them to the GPU, allowing video effect:
+blue screen, color band, gray, normal map.
-bge.texture uses FFmpeg to load images and videos. All the formats and codecs that FFmpeg supports are supported by this module, including but not limited to:
+bge.texture uses FFmpeg to load images and videos.
+All the formats and codecs that FFmpeg supports are supported by this module, including but not limited to:
* AVI
* Ogg
@@ -36,21 +39,29 @@ When the texture object is deleted, the new texture is deleted and the old textu
.. module:: bge.texture
-.. include:: ../examples/bge.texture.py
+.. include:: __/examples/bge.texture.py
:start-line: 1
:end-line: 5
-
-.. literalinclude:: ../examples/bge.texture.py
+
+.. literalinclude:: __/examples/bge.texture.py
:lines: 7-
-.. include:: ../examples/bge.texture.1.py
+.. include:: __/examples/bge.texture.1.py
+ :start-line: 1
+ :end-line: 6
+
+.. literalinclude:: __/examples/bge.texture.1.py
+ :lines: 8-
+
+
+.. include:: __/examples/bge.texture.2.py
:start-line: 1
:end-line: 6
-
-.. literalinclude:: ../examples/bge.texture.1.py
+
+.. literalinclude:: __/examples/bge.texture.2.py
:lines: 8-
-
-
+
+
*************
Video classes
*************
@@ -58,7 +69,7 @@ Video classes
.. class:: VideoFFmpeg(file, capture=-1, rate=25.0, width=0, height=0)
FFmpeg video source.
-
+
:arg file: Path to the video to load; if capture >= 0 on Windows, this parameter will not be used.
:type file: str
:arg capture: Capture device number; if >= 0, the corresponding webcam will be used. (optional)
@@ -73,14 +84,14 @@ Video classes
.. attribute:: status
Video status. (readonly)
-
+
:type: int
:value: see `FFmpeg Video and Image Status`_.
.. attribute:: range
Replay range.
-
+
:type: sequence of two floats
.. attribute:: repeat
@@ -104,33 +115,33 @@ Video classes
.. attribute:: image
Image data. (readonly)
-
+
:type: :class:`~bgl.Buffer` or None
.. attribute:: size
Image size. (readonly)
-
+
:type: tuple of two ints
.. attribute:: scale
Fast scale of image (near neighbour).
-
+
:type: bool
.. attribute:: flip
Flip image vertically.
-
+
:type: bool
.. attribute:: filter
Pixel filter.
-
+
:type: one of...
-
+
* :class:`FilterBGR24`
* :class:`FilterBlueScreen`
* :class:`FilterColor`
@@ -155,32 +166,41 @@ Video classes
.. method:: play()
Play (restart) video.
-
+
:return: Whether the video was ready or stopped.
:rtype: bool
.. method:: pause()
Pause video.
-
+
:return: Whether the video was playing.
:rtype: bool
.. method:: stop()
Stop video (play will replay it from start).
-
+
:return: Whether the video was playing.
:rtype: bool
- .. method:: refresh()
+ .. method:: refresh(buffer=None, format="RGBA", timestamp=-1.0)
- Refresh video - get its status.
-
- :value: see `FFmpeg Video and Image Status`_.
+ Refresh video - get its status and optionally copy the frame to an external buffer.
+ :arg buffer: An optional object that implements the buffer protocol.
+ If specified, the image is copied to the buffer, which must be big enough or an exception is thrown.
+ :type buffer: any buffer type
+ :arg format: An optional image format specifier for the image that will be copied to the buffer.
+ Only valid values are "RGBA" or "BGRA"
+ :type format: str
+ :arg timestamp: An optional timestamp (in seconds from the start of the movie)
+ of the frame to be copied to the buffer.
+ :type timestamp: float
+ :return: see `FFmpeg Video and Image Status`_.
:rtype: int
+
*************
Image classes
*************
@@ -188,14 +208,14 @@ Image classes
.. class:: ImageFFmpeg(file)
FFmpeg image source.
-
+
:arg file: Path to the image to load.
:type file: str
.. attribute:: status
Image status. (readonly)
-
+
:type: int
:value: see `FFmpeg Video and Image Status`_.
@@ -208,33 +228,33 @@ Image classes
.. attribute:: image
Image data. (readonly)
-
+
:type: :class:`~bgl.Buffer` or None
.. attribute:: size
Image size. (readonly)
-
+
:type: tuple of two ints
.. attribute:: scale
Fast scale of image (near neighbour).
-
+
:type: bool
.. attribute:: flip
Flip image vertically.
-
+
:type: bool
.. attribute:: filter
Pixel filter.
-
+
:type: one of...
-
+
* :class:`FilterBGR24`
* :class:`FilterBlueScreen`
* :class:`FilterColor`
@@ -244,25 +264,30 @@ Image classes
* :class:`FilterRGB24`
* :class:`FilterRGBA32`
- .. method:: refresh()
+ .. method:: refresh(buffer=None, format="RGBA")
- Refresh image, i.e. load it.
-
- :value: see `FFmpeg Video and Image Status`_.
+ Refresh image, get its status and optionally copy the frame to an external buffer.
+ :arg buffer: An optional object that implements the buffer protocol.
+ If specified, the image is copied to the buffer, which must be big enough or an exception is thrown.
+ :type buffer: any buffer type
+ :arg format: An optional image format specifier for the image that will be copied to the buffer.
+ Only valid values are "RGBA" or "BGRA"
+ :type format: str
+ :return: see `FFmpeg Video and Image Status`_.
:rtype: int
.. method:: reload(newname=None)
Reload image, i.e. reopen it.
-
+
:arg newname: Path to a new image. (optional)
:type newname: str
.. class:: ImageBuff(width, height, color=0, scale=False)
Image source from image buffer.
-
+
:arg width: Width of the image.
:type width: int
:arg height: Height of the image.
@@ -276,9 +301,9 @@ Image classes
.. attribute:: filter
Pixel filter.
-
+
:type: one of...
-
+
* :class:`FilterBGR24`
* :class:`FilterBlueScreen`
* :class:`FilterColor`
@@ -291,19 +316,19 @@ Image classes
.. attribute:: flip
Flip image vertically.
-
+
:type: bool
.. attribute:: image
Image data. (readonly)
-
+
:type: :class:`~bgl.Buffer` or None
.. method:: load(imageBuffer, width, height)
Load image from buffer.
-
+
:arg imageBuffer: Buffer to load the image from.
:type imageBuffer: :class:`~bgl.Buffer` or Python object implementing the buffer protocol (f.ex. bytes)
:arg width: Width of the image to load.
@@ -314,9 +339,10 @@ Image classes
.. method:: plot(imageBuffer, width, height, positionX, positionY, mode=IMB_BLEND_COPY)
Update image buffer.
-
+
:arg imageBuffer: Buffer to load the new data from.
- :type imageBuffer: :class:`~bgl.Buffer`, :class:`ImageBuff` or Python object implementing the buffer protocol (f.ex. bytes)
+ :type imageBuffer: :class:`~bgl.Buffer`, :class:`ImageBuff`
+ or Python object implementing the buffer protocol (f.ex. bytes)
:arg width: Width of the data to load.
:type width: int
:arg height: Height of the data to load.
@@ -327,18 +353,18 @@ Image classes
:type positionY: int
:arg mode: Drawing mode, see `Image Blending Modes`_.
:type mode: int
-
+
.. attribute:: scale
Fast scale of image (near neighbour).
-
+
:type: bool
.. attribute:: size
Image size. (readonly)
-
+
:type: tuple of two ints
.. attribute:: valid
@@ -350,10 +376,11 @@ Image classes
.. class:: ImageMirror(scene, observer, mirror, material=0)
Image source from mirror.
-
+
:arg scene: Scene in which the image has to be taken.
:type scene: :class:`~bge.types.KX_Scene`
- :arg observer: Reference object for the mirror (the object from which the mirror has to be looked at, for example a camera).
+ :arg observer: Reference object for the mirror
+ (the object from which the mirror has to be looked at, for example a camera).
:type observer: :class:`~bge.types.KX_GameObject`
:arg mirror: Object holding the mirror.
:type mirror: :class:`~bge.types.KX_GameObject`
@@ -363,33 +390,33 @@ Image classes
.. attribute:: alpha
Use alpha in texture.
-
+
:type: bool
.. attribute:: background
Background color.
-
+
:type: int or float list [r, g, b, a] in [0.0, 255.0]
.. attribute:: capsize
Size of render area.
-
+
:type: sequence of two ints
.. attribute:: clip
Clipping distance.
-
+
:type: float in [0.01, 5000.0]
.. attribute:: filter
Pixel filter.
-
+
:type: one of...
-
+
* :class:`FilterBGR24`
* :class:`FilterBlueScreen`
* :class:`FilterColor`
@@ -402,29 +429,38 @@ Image classes
.. attribute:: flip
Flip image vertically.
-
+
:type: bool
.. attribute:: image
Image data. (readonly)
-
+
:type: :class:`~bgl.Buffer` or None
- .. method:: refresh()
+ .. method:: refresh(buffer=None, format="RGBA")
+
+ Refresh image - render and copy the image to an external buffer (optional)
+ then invalidate its current content.
- Refresh image - invalidate its current content.
+ :arg buffer: An optional object that implements the buffer protocol.
+ If specified, the image is rendered and copied to the buffer,
+ which must be big enough or an exception is thrown.
+ :type buffer: any buffer type
+ :arg format: An optional image format specifier for the image that will be copied to the buffer.
+ Only valid values are "RGBA" or "BGRA"
+ :type format: str
.. attribute:: scale
Fast scale of image (near neighbour).
-
+
:type: bool
.. attribute:: size
Image size (readonly).
-
+
:type: tuple of two ints
.. attribute:: valid
@@ -436,7 +472,7 @@ Image classes
.. attribute:: whole
Use whole viewport to render.
-
+
:type: bool
.. class:: ImageMix
@@ -446,9 +482,9 @@ Image classes
.. attribute:: filter
Pixel filter.
-
+
:type: one of...
-
+
* :class:`FilterBGR24`
* :class:`FilterBlueScreen`
* :class:`FilterColor`
@@ -461,19 +497,19 @@ Image classes
.. attribute:: flip
Flip image vertically.
-
+
:type: bool
.. method:: getSource(id)
Get image source.
-
+
:arg id: Identifier of the source to get.
:type id: str
-
+
:return: Image source.
:rtype: one of...
-
+
* :class:`VideoFFmpeg`
* :class:`ImageFFmpeg`
* :class:`ImageBuff`
@@ -485,43 +521,52 @@ Image classes
.. method:: getWeight(id)
Get image source weight.
-
+
:arg id: Identifier of the source.
:type id: str
-
+
:return: Weight of the source.
:rtype: int
.. attribute:: image
Image data. (readonly)
-
+
:type: :class:`~bgl.Buffer` or None
- .. method:: refresh()
+ .. method:: refresh(buffer=None, format="RGBA")
- Refresh image - invalidate its current content.
+ Refresh image - calculate and copy the image to an external buffer (optional)
+ then invalidate its current content.
+
+ :arg buffer: An optional object that implements the buffer protocol.
+ If specified, the image is calculated and copied to the buffer,
+ which must be big enough or an exception is thrown.
+ :type buffer: any buffer type
+ :arg format: An optional image format specifier for the image that will be copied to the buffer.
+ Only valid values are "RGBA" or "BGRA"
+ :type format: str
.. attribute:: scale
Fast scale of image (near neighbour).
-
+
:type: bool
-
+
.. attribute:: size
Image size. (readonly)
-
+
:type: tuple of two ints
.. method:: setSource(id, image)
Set image source - all sources must have the same size.
-
+
:arg id: Identifier of the source to set.
:type id: str
:arg image: Image source of type...
-
+
* :class:`VideoFFmpeg`
* :class:`ImageFFmpeg`
* :class:`ImageBuff`
@@ -533,7 +578,7 @@ Image classes
.. method:: setWeight(id, weight)
Set image source weight - the sum of the weights should be 256 to get full color intensity in the output.
-
+
:arg id: Identifier of the source.
:type id: str
:arg weight: Weight of the source.
@@ -548,36 +593,40 @@ Image classes
.. class:: ImageRender(scene, camera)
Image source from render.
-
+ The render is done on a custom framebuffer object if fbo is specified,
+ otherwise on the default framebuffer.
+
:arg scene: Scene in which the image has to be taken.
:type scene: :class:`~bge.types.KX_Scene`
:arg camera: Camera from which the image has to be taken.
:type camera: :class:`~bge.types.KX_Camera`
+ :arg fbo: Off-screen render buffer object (optional)
+ :type fbo: :class:`~bge.render.RASOffScreen`
.. attribute:: alpha
Use alpha in texture.
-
+
:type: bool
.. attribute:: background
Background color.
-
+
:type: int or float list [r, g, b, a] in [0.0, 255.0]
.. attribute:: capsize
Size of render area.
-
+
:type: sequence of two ints
.. attribute:: filter
Pixel filter.
-
+
:type: one of...
-
+
* :class:`FilterBGR24`
* :class:`FilterBlueScreen`
* :class:`FilterColor`
@@ -590,29 +639,25 @@ Image classes
.. attribute:: flip
Flip image vertically.
-
+
:type: bool
.. attribute:: image
Image data. (readonly)
-
- :type: :class:`~bgl.Buffer` or None
-
- .. method:: refresh()
- Refresh image - invalidate its current content.
+ :type: :class:`~bgl.Buffer` or None
.. attribute:: scale
Fast scale of image (near neighbour).
-
+
:type: bool
.. attribute:: size
Image size. (readonly)
-
+
:type: tuple of two ints
.. attribute:: valid
@@ -624,22 +669,58 @@ Image classes
.. attribute:: whole
Use whole viewport to render.
-
+
:type: bool
.. attribute:: depth
Use depth component of render as array of float - not suitable for texture source,
should only be used with bge.texture.imageToArray(mode='F').
-
+
:type: bool
.. attribute:: zbuff
Use depth component of render as grey scale color - suitable for texture source.
-
+
:type: bool
+ .. method:: render()
+
+ Render the scene but do not extract the pixels yet.
+ The function returns as soon as the render commands have been send to the GPU.
+ The render will proceed asynchronously in the GPU while the host can perform other tasks.
+ To complete the render, you can either call :func:`refresh`
+ directly of refresh the texture of which this object is the source.
+ This method is useful to implement asynchronous render for optimal performance: call render()
+ on frame n and refresh() on frame n+1 to give as much as time as possible to the GPU
+ to render the frame while the game engine can perform other tasks.
+
+ :return: True if the render was initiated, False if the render cannot be performed (e.g. the camera is active)
+ :rtype: bool
+
+ .. method:: refresh()
+ .. method:: refresh(buffer, format="RGBA")
+
+ Refresh video - render and optionally copy the image to an external buffer then invalidate its current content.
+ The render may have been started earlier with the :func:`render` method,
+ in which case this function simply waits for the render operations to complete.
+ When called without argument, the pixels are not extracted but the render is guaranteed
+ to be completed when the function returns.
+ This only makes sense with offscreen render on texture target (see :func:`~bge.render.offScreenCreate`).
+
+ :arg buffer: An object that implements the buffer protocol.
+ If specified, the image is copied to the buffer, which must be big enough or an exception is thrown.
+ The transfer to the buffer is optimal if no processing of the image is needed.
+ This is the case if ``flip=False, alpha=True, scale=False, whole=True, depth=False, zbuff=False``
+ and no filter is set.
+ :type buffer: any buffer type of sufficient size
+ :arg format: An optional image format specifier for the image that will be copied to the buffer.
+ Only valid values are "RGBA" or "BGRA"
+ :type format: str
+ :return: True if the render is complete, False if the render cannot be performed (e.g. the camera is active)
+ :rtype: bool
+
.. class:: ImageViewport
Image source from viewport.
@@ -647,21 +728,21 @@ Image classes
.. attribute:: alpha
Use alpha in texture.
-
+
:type: bool
.. attribute:: capsize
Size of viewport area being captured.
-
+
:type: sequence of two ints
.. attribute:: filter
Pixel filter.
-
+
:type: one of...
-
+
* :class:`FilterBGR24`
* :class:`FilterBlueScreen`
* :class:`FilterColor`
@@ -674,35 +755,45 @@ Image classes
.. attribute:: flip
Flip image vertically.
-
+
:type: bool
.. attribute:: image
Image data. (readonly)
-
+
:type: :class:`~bgl.Buffer` or None
.. attribute:: position
Upper left corner of the captured area.
-
+
:type: sequence of two ints
- .. method:: refresh()
+ .. method:: refresh(buffer=None, format="RGBA")
+
+ Refresh video - copy the viewport to an external buffer (optional) then invalidate its current content.
- Refresh image - invalidate its current content.
+ :arg buffer: An optional object that implements the buffer protocol.
+ If specified, the image is copied to the buffer, which must be big enough or an exception is thrown.
+ The transfer to the buffer is optimal if no processing of the image is needed.
+ This is the case if ``flip=False, alpha=True, scale=False, whole=True, depth=False, zbuff=False``
+ and no filter is set.
+ :type buffer: any buffer type
+ :arg format: An optional image format specifier for the image that will be copied to the buffer.
+ Only valid values are "RGBA" or "BGRA"
+ :type format: str
.. attribute:: scale
Fast scale of image (near neighbour).
-
+
:type: bool
.. attribute:: size
Image size. (readonly)
-
+
:type: tuple of two ints
.. attribute:: valid
@@ -714,23 +805,201 @@ Image classes
.. attribute:: whole
Use whole viewport to capture.
-
+
:type: bool
.. attribute:: depth
Use depth component of viewport as array of float - not suitable for texture source,
- should only be used with bge.texture.imageToArray(mode='F').
-
+ should only be used with ``bge.texture.imageToArray(mode='F')``.
+
:type: bool
.. attribute:: zbuff
- Use depth component of viewport as grey scale color - suitable for texture source.
-
+ Use depth component of viewport as grey scale color - suitable for texture source.
+
:type: bool
-
+.. class:: VideoDeckLink(format, capture=0)
+
+ Image source from an external video stream captured with a DeckLink video card from
+ Black Magic Design.
+ Before this source can be used, a DeckLink hardware device must be installed, it can be a PCIe card
+ or a USB device, and the 'Desktop Video' software package (version 10.4 or above must be installed)
+ on the host as described in the DeckLink documentation.
+ If in addition you have a recent nVideo Quadro card, you can benefit from the 'GPUDirect' technology
+ to push the captured video frame very efficiently to the GPU. For this you need to install the
+ 'DeckLink SDK' version 10.4 or above and copy the 'dvp.dll' runtime library to Blender's
+ installation directory or to any other place where Blender can load a DLL from.
+
+ :arg format: string describing the video format to be captured.
+ :type format: str
+ :arg capture: Card number from which the input video must be captured.
+ :type capture: int
+
+ The format argument must be written as ``<displayMode>/<pixelFormat>[/3D][:<cacheSize>]`` where ``<displayMode>``
+ describes the frame size and rate and <pixelFormat> the encoding of the pixels.
+ The optional ``/3D`` suffix is to be used if the video stream is stereo with a left and right eye feed.
+ The optional ``:<cacheSize>`` suffix determines the number of the video frames kept in cache, by default 8.
+ Some DeckLink cards won't work below a certain cache size.
+ The default value 8 should be sufficient for all cards.
+ You may try to reduce the cache size to reduce the memory footprint. For example the The 4K Extreme is known
+ to work with 3 frames only, the Extreme 2 needs 4 frames and the Intensity Shuttle needs 6 frames, etc.
+ Reducing the cache size may be useful when Decklink is used in conjunction with GPUDirect:
+ all frames must be locked in memory in that case and that puts a lot of pressure on memory.
+ If you reduce the cache size too much,
+ you'll get no error but no video feed either.
+
+ The valid ``<displayMode>`` values are copied from the ``BMDDisplayMode`` enum in the DeckLink API
+ without the 'bmdMode' prefix. In case a mode that is not in this list is added in a later version
+ of the SDK, it is also possible to specify the 4 letters of the internal code for that mode.
+ You will find the internal code in the ``DeckLinkAPIModes.h`` file that is part of the SDK.
+ Here is for reference the full list of supported display modes with their equivalent internal code:
+
+ Internal Codes
+ - NTSC 'ntsc'
+ - NTSC2398 'nt23'
+ - PAL 'pal '
+ - NTSCp 'ntsp'
+ - PALp 'palp'
+ HD 1080 Modes
+ - HD1080p2398 '23ps'
+ - HD1080p24 '24ps'
+ - HD1080p25 'Hp25'
+ - HD1080p2997 'Hp29'
+ - HD1080p30 'Hp30'
+ - HD1080i50 'Hi50'
+ - HD1080i5994 'Hi59'
+ - HD1080i6000 'Hi60'
+ - HD1080p50 'Hp50'
+ - HD1080p5994 'Hp59'
+ - HD1080p6000 'Hp60'
+ HD 720 Modes
+ - HD720p50 'hp50'
+ - HD720p5994 'hp59'
+ - HD720p60 'hp60'
+ 2k Modes
+ - 2k2398 '2k23'
+ - 2k24 '2k24'
+ - 2k25 '2k25'
+ 4k Modes
+ - 4K2160p2398 '4k23'
+ - 4K2160p24 '4k24'
+ - 4K2160p25 '4k25'
+ - 4K2160p2997 '4k29'
+ - 4K2160p30 '4k30'
+ - 4K2160p50 '4k50'
+ - 4K2160p5994 '4k59'
+ - 4K2160p60 '4k60'
+
+ Most of names are self explanatory. If necessary refer to the DeckLink API documentation for more information.
+
+ Similarly, <pixelFormat> is copied from the BMDPixelFormat enum.
+
+ Here is for reference the full list of supported pixel format and their equivalent internal code:
+
+ Pixel Formats
+ - 8BitYUV '2vuy'
+ - 10BitYUV 'v210'
+ - 8BitARGB * no equivalent code *
+ - 8BitBGRA 'BGRA'
+ - 10BitRGB 'r210'
+ - 12BitRGB 'R12B'
+ - 12BitRGBLE 'R12L'
+ - 10BitRGBXLE 'R10l'
+ - 10BitRGBX 'R10b'
+
+ Refer to the DeckLink SDK documentation for a full description of these pixel format.
+ It is important to understand them as the decoding of the pixels is NOT done in VideoTexture
+ for performance reason. Instead a specific shader must be used to decode the pixel in the GPU.
+ Only the '8BitARGB', '8BitBGRA' and '10BitRGBXLE' pixel formats are mapped directly to OpenGL RGB float textures.
+ The '8BitYUV' and '10BitYUV' pixel formats are mapped to openGL RGB float texture but require a shader to decode.
+ The other pixel formats are sent as a ``GL_RED_INTEGER`` texture (i.e. a texture with only the
+ red channel coded as an unsigned 32 bit integer) and are not recommended for use.
+
+ Example: ``HD1080p24/10BitYUV/3D:4`` is equivalent to ``24ps/v210/3D:4``
+ and represents a full HD stereo feed at 24 frame per second and 4 frames cache size.
+
+ Although video format auto detection is possible with certain DeckLink devices, the corresponding
+ API is NOT implemented in the BGE. Therefore it is important to specify the format string that
+ matches exactly the video feed. If the format is wrong, no frame will be captured.
+ It should be noted that the pixel format that you need to specify is not necessarily the actual
+ format in the video feed. For example, the 4K Extreme card delivers 8bit RGBs pixels in the
+ '10BitRGBXLE' format. Use the 'Media Express' application included in 'Desktop Video' to discover
+ which pixel format works for a particular video stream.
+
+ .. attribute:: status
+
+ Status of the capture: 1=ready to use, 2=capturing, 3=stopped
+
+ :type: int
+
+ .. attribute:: framerate
+
+ Capture frame rate as computed from the video format.
+
+ :type: float
+
+ .. attribute:: valid
+
+ Tells if the image attribute can be used to retrieve the image.
+ Always False in this implementation (the image is not available at python level)
+
+ :type: bool
+
+ .. attribute:: image
+
+ The image data. Always None in this implementation.
+
+ :type: :class:`~bgl.Buffer` or None
+
+ .. attribute:: size
+
+ The size of the frame in pixel.
+ Stereo frames have double the height of the video frame, i.e. 3D is delivered to the GPU
+ as a single image in top-bottom order, left eye on top.
+
+ :type: (int,int)
+
+ .. attribute:: scale
+
+ Not used in this object.
+
+ :type: bool
+
+ .. attribute:: flip
+
+ Not used in this object.
+
+ :type: bool
+
+ .. attribute:: filter
+
+ Not used in this object.
+
+ .. method:: play()
+
+ Kick-off the capture after creation of the object.
+
+ :return: True if the capture could be started, False otherwise.
+ :rtype: bool
+
+ .. method:: pause()
+
+ Temporary stops the capture. Use play() to restart it.
+
+ :return: True if the capture could be paused, False otherwise.
+ :rtype: bool
+
+ .. method:: stop()
+
+ Stops the capture.
+
+ :return: True if the capture could be stopped, False otherwise.
+ :rtype: bool
+
+
***************
Texture classes
***************
@@ -738,7 +1007,7 @@ Texture classes
.. class:: Texture(gameObj, materialID=0, textureID=0, textureObj=None)
Texture object.
-
+
:arg gameObj: Game object to be created a video texture on.
:type gameObj: :class:`~bge.types.KX_GameObject`
:arg materialID: Material ID. (optional)
@@ -751,7 +1020,7 @@ Texture classes
.. attribute:: bindId
OpenGL Bind Name. (readonly)
-
+
:type: int
.. method:: close()
@@ -761,27 +1030,28 @@ Texture classes
.. attribute:: mipmap
Mipmap texture.
-
+
:type: bool
- .. method:: refresh(refresh_source=True, ts=-1.0)
+ .. method:: refresh(refresh_source=True, timestamp=-1.0)
Refresh texture from source.
-
+
:arg refresh_source: Whether to also refresh the image source of the texture.
:type refresh_source: bool
- :arg ts: If the texture controls a VideoFFmpeg object:
- timestamp (in seconds from the start of the movie) of the frame to be loaded; this can be
- used for video-sound synchonization by passing :attr:`~bge.types.KX_SoundActuator.time` to it. (optional)
- :type ts: float
+ :arg timestamp: If the texture controls a VideoFFmpeg object:
+ timestamp (in seconds from the start of the movie) of the frame to be loaded; this can be
+ used for video-sound synchonization by passing :attr:`~bge.types.KX_SoundActuator.time` to it. (optional)
+ :type timestamp: float
.. attribute:: source
Source of texture.
-
+
:type: one of...
-
+
* :class:`VideoFFmpeg`
+ * :class:`VideoDeckLink`
* :class:`ImageFFmpeg`
* :class:`ImageBuff`
* :class:`ImageMirror`
@@ -789,47 +1059,168 @@ Texture classes
* :class:`ImageRender`
* :class:`ImageViewport`
-
+.. class:: DeckLink(cardIdx=0, format="")
+
+ Certain DeckLink devices can be used to playback video: the host sends video frames regularly
+ for immediate or scheduled playback. The video feed is outputted on HDMI or SDI interfaces.
+ This class supports the immediate playback mode: it has a source attribute that is assigned
+ one of the source object in the bge.texture module. Refreshing the DeckLink object causes
+ the image source to be computed and sent to the DeckLink device for immediate transmission
+ on the output interfaces. Keying is supported: it allows to composite the frame with an
+ input video feed that transits through the DeckLink card.
+
+ :arg cardIdx: Number of the card to be used for output (0=first card).
+ It should be noted that DeckLink devices are usually half duplex:
+ they can either be used for capture or playback but not both at the same time.
+ :type cardIdx: int
+ :arg format: String representing the display mode of the output feed.
+ :type format: str
+
+ The default value of the format argument is reserved for auto detection but it is currently
+ not supported (it will generate a runtime error) and thus the video format must be explicitly
+ specified. If keying is the goal (see keying attributes), the format must match exactly the
+ input video feed, otherwise it can be any format supported by the device (there will be a
+ runtime error if not).
+ The format of the string is ``<displayMode>[/3D]``.
+
+ Refer to :class:`VideoDeckLink` to get the list of acceptable ``<displayMode>``.
+ The optional ``/3D`` suffix is used to create a stereo 3D feed.
+ In that case the 'right' attribute must also be set to specify the image source for the right eye.
+
+ Note: The pixel format is not specified here because it is always BGRA. The alpha channel is
+ used in keying to mix the source with the input video feed, otherwise it is not used.
+ If a conversion is needed to match the native video format, it is done inside the DeckLink driver
+ or device.
+
+ .. attribute:: source
+
+ This attribute must be set to one of the image source. If the image size does not fit exactly
+ the frame size, the extend attribute determines what to do.
+
+ For best performance, the source image should match exactly the size of the output frame.
+ A further optimization is achieved if the image source object is ImageViewport or ImageRender
+ set for whole viewport, flip disabled and no filter: the GL frame buffer is copied directly
+ to the image buffer and directly from there to the DeckLink card (hence no buffer to buffer
+ copy inside VideoTexture).
+
+ :type: one of...
+ - :class:`VideoFFmpeg`
+ - :class:`VideoDeckLink`
+ - :class:`ImageFFmpeg`
+ - :class:`ImageBuff`
+ - :class:`ImageMirror`
+ - :class:`ImageMix`
+ - :class:`ImageRender`
+ - :class:`ImageViewport`
+
+ .. attribute:: right
+
+ If the video format is stereo 3D, this attribute should be set to an image source object
+ that will produce the right eye images. If the goal is to render the BGE scene in 3D,
+ it can be achieved with 2 cameras, one for each eye, used by 2 ImageRender with an offscreen
+ render buffer that is just the size of the video frame.
+
+ :type: one of...
+ - :class:`VideoFFmpeg`
+ - :class:`VideoDeckLink`
+ - :class:`ImageFFmpeg`
+ - :class:`ImageBuff`
+ - :class:`ImageMirror`
+ - :class:`ImageMix`
+ - :class:`ImageRender`
+ - :class:`ImageViewport`
+
+ .. attribute:: keying
+
+ Specify if keying is enabled. False (default): the output frame is sent unmodified on
+ the output interface (in that case no input video is required). True: the output frame
+ is mixed with the input video, using the alpha channel to blend the two images and the
+ combination is sent on the output interface.
+
+ :type: bool
+
+ .. attribute:: level
+
+ If keying is enabled, sets the keying level from 0 to 255. This value is a global alpha value
+ that multiplies the alpha channel of the image source. Use 255 (the default) to keep the alpha
+ channel unmodified, 0 to make the output frame totally transparent.
+
+ :type: int
+
+ .. attribute:: extend
+
+ Determines how the image source should be mapped if the size does not fit the video frame size.
+ * False (the default): map the image pixel by pixel.
+ If the image size is smaller than the frame size, extra space around the image is filled with
+ 0-alpha black. If it is larger, the image is cropped to fit the frame size.
+ * True: the image is scaled by the nearest neighbor algorithm to fit the frame size.
+ The scaling is fast but poor quality. For best results, always adjust the image source to
+ match the size of the output video.
+
+ :type: bool
+
+ .. method:: close()
+
+ Close the DeckLink device and release all resources. After calling this method,
+ the object cannot be reactivated, it must be destroyed and a new DeckLink object
+ created from fresh to restart the output.
+
+ .. method:: refresh(refresh_source,ts)
+
+ This method must be called frequently to update the output frame in the DeckLink device.
+
+ :arg refresh_source: True if the source objects image buffer should be invalidated after being
+ used to compute the output frame. This triggers the recomputing of the
+ source image on next refresh, which is normally the desired effect.
+ False if the image source buffer should stay valid and reused on next refresh.
+ Note that the DeckLink device stores the output frame and replays until a
+ new frame is sent from the host. Thus, it is not necessary to refresh the
+ DeckLink object if it is known that the image source has not changed.
+ :type refresh_source: bool
+ :arg ts: The timestamp value passed to the image source object to compute the image.
+ If unspecified, the BGE clock is used.
+ :type ts: float
+
+
**************
Filter classes
**************
-
.. class:: FilterBGR24
Source filter BGR24.
.. class:: FilterBlueScreen
- Filter for Blue Screen. The RGB channels of the color are left unchanged, while the output alpha is obtained as follows:
-
- * if the square of the euclidian distance between the RGB color and the filter's reference color is smaller than the filter's lower limit,
+ Filter for Blue Screen.
+ The RGB channels of the color are left unchanged, while the output alpha is obtained as follows:
+
+ - if the square of the euclidian distance between the RGB color
+ and the filter's reference color is smaller than the filter's lower limit,
the output alpha is set to 0;
-
- * if that square is bigger than the filter's upper limit, the output alpha is set to 255;
-
- * otherwise the output alpha is linarly extrapoled between 0 and 255 in the interval of the limits.
+ - if that square is bigger than the filter's upper limit, the output alpha is set to 255;
+ - otherwise the output alpha is linarly extrapoled between 0 and 255 in the interval of the limits.
.. attribute:: color
Reference color.
-
+
:type: sequence of three ints
:default: (0, 0, 255)
.. attribute:: limits
Reference color limits.
-
+
:type: sequence of two ints
:default: (64, 64)
.. attribute:: previous
Previous pixel filter.
-
+
:type: one of...
-
+
* :class:`FilterBGR24`
* :class:`FilterBlueScreen`
* :class:`FilterColor`
@@ -841,22 +1232,23 @@ Filter classes
.. class:: FilterColor
- Filter for color calculations. The output color is obtained by multiplying the reduced 4x4 matrix with the input color
+ Filter for color calculations.
+ The output color is obtained by multiplying the reduced 4x4 matrix with the input color
and adding the remaining column to the result.
.. attribute:: matrix
Matrix [4][5] for color calculation.
-
+
:type: sequence of four sequences of five ints
:default: ((256, 0, 0, 0, 0), (0, 256, 0, 0, 0), (0, 0, 256, 0, 0), (0, 0, 0, 256, 0))
.. attribute:: previous
Previous pixel filter.
-
+
:type: one of...
-
+
* :class:`FilterBGR24`
* :class:`FilterBlueScreen`
* :class:`FilterColor`
@@ -868,14 +1260,15 @@ Filter classes
.. class:: FilterGray
- Filter for gray scale effect. Proportions of R, G and B contributions in the output gray scale are 28:151:77.
+ Filter for gray scale effect.
+ Proportions of R, G and B contributions in the output gray scale are 28:151:77.
.. attribute:: previous
Previous pixel filter.
-
+
:type: one of...
-
+
* :class:`FilterBGR24`
* :class:`FilterBlueScreen`
* :class:`FilterColor`
@@ -888,26 +1281,26 @@ Filter classes
.. class:: FilterLevel
Filter for levels calculations. Each output color component is obtained as follows:
-
+
* if it is smaller than its corresponding min value, it is set to 0;
-
+
* if it is bigger than its corresponding max value, it is set to 255;
-
+
* Otherwise it is linearly extrapoled between 0 and 255 in the (min, max) interval.
.. attribute:: levels
Levels matrix [4] (min, max).
-
+
:type: sequence of four sequences of two ints
:default: ((0, 255), (0, 255), (0, 255), (0, 255))
.. attribute:: previous
Previous pixel filter.
-
+
:type: one of...
-
+
* :class:`FilterBGR24`
* :class:`FilterBlueScreen`
* :class:`FilterColor`
@@ -924,23 +1317,23 @@ Filter classes
.. attribute:: colorIdx
Index of color used to calculate normal (0 - red, 1 - green, 2 - blue, 3 - alpha).
-
+
:type: int in [0, 3]
:default: 0
.. attribute:: depth
Depth of relief.
-
+
:type: float
:default: 4.0
.. attribute:: previous
Previous pixel filter.
-
+
:type: one of...
-
+
* :class:`FilterBGR24`
* :class:`FilterBlueScreen`
* :class:`FilterColor`
@@ -984,25 +1377,29 @@ Functions
* :class:`ImageMix`
* :class:`ImageRender`
* :class:`ImageViewport`
-
+
:arg mode: Optional argument representing the pixel format.
-
- * You can use the characters R, G, B for the 3 color channels, A for the alpha channel,
+
+ - You can use the characters R, G, B for the 3 color channels, A for the alpha channel,
0 to force a fixed 0 color channel and 1 to force a fixed 255 color channel.
-
+
Examples:
- * "BGR" will return 3 bytes per pixel with the Blue, Green and Red channels in that order.
- * "RGB1" will return 4 bytes per pixel with the Red, Green, Blue channels in that order and the alpha channel forced to 255.
-
- * A special mode "F" allows to return the image as an array of float. This mode should only be used to retrieve
- the depth buffer of the class:`ImageViewport` and :class:`ImageRender` objects.
+
+ - "BGR" will return 3 bytes per pixel with the
+ Blue, Green and Red channels in that order.
+ - "RGB1" will return 4 bytes per pixel with the
+ Red, Green, Blue channels in that order and the alpha channel forced to 255.
+
+ - A special mode "F" allows to return the image as an array of float.
+ This mode should only be used to retrieve the depth buffer of the
+ class:`ImageViewport` and :class:`ImageRender` objects.
The default mode is "RGBA".
-
+
:type mode: str
-
+
:return: An object representing the image as one dimensional array of bytes of size (pixel_size*width*height),
- line by line starting from the bottom of the image. The pixel size and format is determined by the mode
- parameter. For mode 'F', the array is a one dimensional array of float of size (width*height).
+ line by line starting from the bottom of the image. The pixel size and format is determined by the mode
+ parameter. For mode 'F', the array is a one dimensional array of float of size (width*height).
:rtype: :class:`~bgl.Buffer`
.. function:: materialID(object, name)
@@ -1017,7 +1414,8 @@ Functions
the texture by material. In that case the material must have a texture channel in first
position.
- If the object has no material that matches name, it generates a runtime error. Use try/except to catch the exception.
+ If the object has no material that matches name, it generates a runtime error.
+ Use try/except to catch the exception.
Ex: ``bge.texture.materialID(obj, 'IMvideo.png')``
@@ -1025,7 +1423,7 @@ Functions
:type object: :class:`~bge.types.KX_GameObject`
:arg name: Name of the texture/material you want to make dynamic.
:type name: str
-
+
:return: The internal material number.
:rtype: int
@@ -1037,11 +1435,11 @@ Functions
:arg filename: Name of the error log file.
:type filename: str
-
+
:return: -1 if the parameter name is invalid (not of type string), else 0.
:rtype: int
-
+
*********
Constants
*********
diff --git a/doc/python_api/rst/bge_types/bge.types.BL_Shader.rst b/doc/python_api/rst/bge_types/bge.types.BL_Shader.rst
index f4f5c0d62ba..a389f68ee04 100644
--- a/doc/python_api/rst/bge_types/bge.types.BL_Shader.rst
+++ b/doc/python_api/rst/bge_types/bge.types.BL_Shader.rst
@@ -214,6 +214,16 @@ base class --- :class:`PyObjectPlus`
:arg iList: a list (2, 3 or 4 elements) of integer values
:type iList: list[integer]
+ .. method:: setUniformEyef(name)
+
+ Set a uniform with a float value that reflects the eye being render in stereo mode:
+ 0.0 for the left eye, 0.5 for the right eye. In non stereo mode, the value of the uniform
+ is fixed to 0.0. The typical use of this uniform is in stereo mode to sample stereo textures
+ containing the left and right eye images in a top-bottom order.
+
+ :arg name: the uniform name
+ :type name: string
+
.. method:: validate()
Validate the shader object.
diff --git a/doc/python_api/rst/bge_types/bge.types.SCA_PythonJoystick.rst b/doc/python_api/rst/bge_types/bge.types.SCA_PythonJoystick.rst
index 2b97b5939e2..bcec751929d 100644
--- a/doc/python_api/rst/bge_types/bge.types.SCA_PythonJoystick.rst
+++ b/doc/python_api/rst/bge_types/bge.types.SCA_PythonJoystick.rst
@@ -12,13 +12,13 @@ base class --- :class:`PyObjectPlus`
.. attribute:: name
The name assigned to the joystick by the operating system. (read-only)
-
+
:type: string
.. attribute:: activeButtons
A list of active button values. (read-only)
-
+
:type: list
.. attribute:: axisValues
@@ -27,8 +27,10 @@ base class --- :class:`PyObjectPlus`
:type: list of ints.
- Each specifying the value of an axis between -1.0 and 1.0 depending on how far the axis is pushed, 0 for nothing.
- The first 2 values are used by most joysticks and gamepads for directional control. 3rd and 4th values are only on some joysticks and can be used for arbitary controls.
+ Each specifying the value of an axis between -1.0 and 1.0
+ depending on how far the axis is pushed, 0 for nothing.
+ The first 2 values are used by most joysticks and gamepads for directional control.
+ 3rd and 4th values are only on some joysticks and can be used for arbitary controls.
* left:[-1.0, 0.0, ...]
* right:[1.0, 0.0, ...]
diff --git a/doc/python_api/rst/include__bmesh.rst b/doc/python_api/rst/include__bmesh.rst
index 070dc34c964..dc43d2c016e 100644
--- a/doc/python_api/rst/include__bmesh.rst
+++ b/doc/python_api/rst/include__bmesh.rst
@@ -1,7 +1,8 @@
..
This document is appended to the auto generated bmesh api doc to avoid clogging up the C files with details.
to test this run:
- ./blender.bin -b -noaudio -P doc/python_api/sphinx_doc_gen.py -- --partial bmesh* ; cd doc/python_api ; sphinx-build sphinx-in sphinx-out ; cd ../../
+ ./blender.bin -b -noaudio -P doc/python_api/sphinx_doc_gen.py -- \
+ --partial bmesh* ; cd doc/python_api ; sphinx-build sphinx-in sphinx-out ; cd ../../
Submodules:
@@ -40,7 +41,7 @@ For an overview of BMesh data types and how they reference each other see:
Example Script
--------------
-.. literalinclude:: ../../../release/scripts/templates_py/bmesh_simple.py
+.. literalinclude:: __/__/__/release/scripts/templates_py/bmesh_simple.py
Stand-Alone Module
@@ -59,9 +60,9 @@ There are 2 ways to access BMesh data, you can create a new BMesh by converting
:class:`bpy.types.BlendData.meshes` or by accessing the current edit mode mesh.
see: :class:`bmesh.types.BMesh.from_mesh` and :mod:`bmesh.from_edit_mesh` respectively.
-When explicitly converting from mesh data python **owns** the data, that is to say - that the mesh only exists while
-python holds a reference to it, and the script is responsible for putting it back into a mesh data-block when the edits
-are done.
+When explicitly converting from mesh data python **owns** the data, that is to say -
+that the mesh only exists while python holds a reference to it,
+and the script is responsible for putting it back into a mesh data-block when the edits are done.
Note that unlike :mod:`bpy`, a BMesh does not necessarily correspond to data in the currently open blend file,
a BMesh can be created, edited and freed without the user ever seeing or having access to it.
diff --git a/doc/python_api/rst/info_quickstart.rst b/doc/python_api/rst/info_quickstart.rst
index 164196c0ac2..f0e1bee58e7 100644
--- a/doc/python_api/rst/info_quickstart.rst
+++ b/doc/python_api/rst/info_quickstart.rst
@@ -151,7 +151,7 @@ Data Creation/Removal
^^^^^^^^^^^^^^^^^^^^^
Those of you familiar with other Python API's may be surprised that
-new datablocks in the bpy API can't be created by calling the class:
+new data-blocks in the bpy API can't be created by calling the class:
>>> bpy.types.Mesh()
Traceback (most recent call last):
@@ -305,7 +305,7 @@ In Python, this is done by defining a class, which is a subclass of an existing
Example Operator
----------------
-.. literalinclude:: ../../../release/scripts/templates_py/operator_simple.py
+.. literalinclude:: __/__/__/release/scripts/templates_py/operator_simple.py
Once this script runs, ``SimpleOperator`` is registered with Blender
and can be called from the operator search popup or added to the toolbar.
@@ -336,7 +336,7 @@ Example Panel
Panels register themselves as a class, like an operator.
Notice the extra ``bl_`` variables used to set the context they display in.
-.. literalinclude:: ../../../release/scripts/templates_py/ui_panel_simple.py
+.. literalinclude:: __/__/__/release/scripts/templates_py/ui_panel_simple.py
To run the script:
@@ -393,11 +393,11 @@ so these are accessed as normal Python types.
Internal Types
--------------
-Used for Blender datablocks and collections: :class:`bpy.types.bpy_struct`
+Used for Blender data-blocks and collections: :class:`bpy.types.bpy_struct`
For data that contains its own attributes groups/meshes/bones/scenes... etc.
-There are 2 main types that wrap Blenders data, one for datablocks
+There are 2 main types that wrap Blenders data, one for data-blocks
(known internally as ``bpy_struct``), another for properties.
>>> bpy.context.object