Mercurial > parpg-core
annotate src/parpg/bGrease/renderer/vector.py @ 92:0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
author | KarstenBock@gmx.net |
---|---|
date | Wed, 21 Sep 2011 16:10:14 +0200 |
parents | 96af64cf3b81 |
children |
rev | line source |
---|---|
92
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
1 ############################################################################# |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
2 # |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
3 # Copyright (c) 2010 by Casey Duncan and contributors |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
4 # All Rights Reserved. |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
5 # |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
6 # This software is subject to the provisions of the MIT License |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
7 # A copy of the license should accompany this distribution. |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
8 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
9 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
10 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
11 # |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
12 ############################################################################# |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
13 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
14 __version__ = '$Id$' |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
15 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
16 __all__ = ('Vector',) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
17 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
18 from parpg.bGrease.geometry import Vec2d |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
19 import ctypes |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
20 from math import sin, cos, radians |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
21 import pyglet |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
22 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
23 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
24 class Vector(object): |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
25 """Renders shapes in a classic vector graphics style |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
26 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
27 :param scale: Scaling factor applied to shape vertices when rendered. |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
28 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
29 :param line_width: The line width provided to ``glLineWidth`` before rendering. |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
30 If not specified or None, ``glLineWidth`` is not called, and the line |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
31 width used is determined by the OpenGL state at the time of rendering. |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
32 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
33 :param anti_alias: If ``True``, OpenGL blending and line smoothing is enabled. |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
34 This allows for fractional line widths as well. If ``False``, the blending |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
35 and line smoothing modes are unchanged. |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
36 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
37 :param corner_fill: If true (the default), the shape corners will be filled |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
38 with round points when the ``line_width`` exceeds 2.0. This improves |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
39 the visual quality of the rendering at larger line widths at some |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
40 cost to performance. Has no effect if ``line_width`` is not specified. |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
41 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
42 :param position_component: Name of :class:`grease.component.Position` |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
43 component to use. Shapes rendered are offset by the entity positions. |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
44 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
45 :param renderable_component: Name of :class:`grease.component.Renderable` |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
46 component to use. This component specifies the entities to be |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
47 rendered and their base color. |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
48 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
49 :param shape_component: Name of :class:`grease.component.Shape` |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
50 component to use. Source of the shape vertices for each entity. |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
51 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
52 The entities rendered are taken from the intersection of he position, |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
53 renderable and shape components each time :meth:`draw` is called. |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
54 """ |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
55 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
56 CORNER_FILL_SCALE = 0.6 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
57 CORNER_FILL_THRESHOLD = 2.0 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
58 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
59 def __init__(self, scale=1.0, line_width=None, anti_alias=True, corner_fill=True, |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
60 position_component='position', |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
61 renderable_component='renderable', |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
62 shape_component='shape'): |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
63 self.scale = float(scale) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
64 self.corner_fill = corner_fill |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
65 self.line_width = line_width |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
66 self.anti_alias = anti_alias |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
67 self._max_line_width = None |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
68 self.position_component = position_component |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
69 self.renderable_component = renderable_component |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
70 self.shape_component = shape_component |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
71 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
72 def set_world(self, world): |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
73 self.world = world |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
74 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
75 def _generate_verts(self): |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
76 """Generate vertex and index arrays for rendering""" |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
77 vert_count = sum(len(shape.verts) + 1 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
78 for shape, ignored, ignored in self.world.components.join( |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
79 self.shape_component, self.position_component, self.renderable_component)) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
80 v_array = (CVertColor * vert_count)() |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
81 if vert_count > 65536: |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
82 i_array = (ctypes.c_uint * 2 * vert_count)() |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
83 i_size = pyglet.gl.GL_UNSIGNED_INT |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
84 else: |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
85 i_array = (ctypes.c_ushort * (2 * vert_count))() |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
86 i_size = pyglet.gl.GL_UNSIGNED_SHORT |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
87 v_index = 0 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
88 i_index = 0 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
89 scale = self.scale |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
90 rot_vec = Vec2d(0, 0) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
91 for shape, position, renderable in self.world.components.join( |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
92 self.shape_component, self.position_component, self.renderable_component): |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
93 shape_start = v_index |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
94 angle = radians(-position.angle) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
95 rot_vec.x = cos(angle) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
96 rot_vec.y = sin(angle) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
97 r = int(renderable.color.r * 255) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
98 g = int(renderable.color.g * 255) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
99 b = int(renderable.color.b * 255) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
100 a = int(renderable.color.a * 255) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
101 for vert in shape.verts: |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
102 vert = vert.cpvrotate(rot_vec) * scale + position.position |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
103 v_array[v_index].vert.x = vert.x |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
104 v_array[v_index].vert.y = vert.y |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
105 v_array[v_index].color.r = r |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
106 v_array[v_index].color.g = g |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
107 v_array[v_index].color.b = b |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
108 v_array[v_index].color.a = a |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
109 if v_index > shape_start: |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
110 i_array[i_index] = v_index - 1 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
111 i_index += 1 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
112 i_array[i_index] = v_index |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
113 i_index += 1 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
114 v_index += 1 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
115 if shape.closed and v_index - shape_start > 2: |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
116 i_array[i_index] = v_index - 1 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
117 i_index += 1 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
118 i_array[i_index] = shape_start |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
119 i_index += 1 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
120 return v_array, i_size, i_array, i_index |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
121 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
122 def draw(self, gl=pyglet.gl): |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
123 vertices, index_size, indices, index_count = self._generate_verts() |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
124 if index_count: |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
125 if self.anti_alias: |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
126 gl.glEnable(gl.GL_LINE_SMOOTH) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
127 gl.glHint(gl.GL_LINE_SMOOTH_HINT, gl.GL_NICEST) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
128 gl.glEnable(gl.GL_BLEND) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
129 gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
130 gl.glPushClientAttrib(gl.GL_CLIENT_VERTEX_ARRAY_BIT) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
131 gl.glEnableClientState(gl.GL_VERTEX_ARRAY) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
132 gl.glEnableClientState(gl.GL_COLOR_ARRAY) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
133 gl.glVertexPointer( |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
134 2, gl.GL_FLOAT, ctypes.sizeof(CVertColor), ctypes.pointer(vertices)) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
135 gl.glColorPointer( |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
136 4, gl.GL_UNSIGNED_BYTE, ctypes.sizeof(CVertColor), |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
137 ctypes.pointer(vertices[0].color)) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
138 if self.line_width is not None: |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
139 gl.glLineWidth(self.line_width) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
140 if self._max_line_width is None: |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
141 range_out = (ctypes.c_float * 2)() |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
142 gl.glGetFloatv(gl.GL_ALIASED_LINE_WIDTH_RANGE, range_out) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
143 self._max_line_width = float(range_out[1]) * self.CORNER_FILL_SCALE |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
144 if self.corner_fill and self.line_width > self.CORNER_FILL_THRESHOLD: |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
145 gl.glEnable(gl.GL_POINT_SMOOTH) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
146 gl.glPointSize( |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
147 min(self.line_width * self.CORNER_FILL_SCALE, self._max_line_width)) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
148 gl.glDrawArrays(gl.GL_POINTS, 0, index_count) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
149 gl.glDrawElements(gl.GL_LINES, index_count, index_size, ctypes.pointer(indices)) |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
150 gl.glPopClientAttrib() |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
151 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
152 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
153 class CVert(ctypes.Structure): |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
154 _fields_ = [("x", ctypes.c_float), ("y", ctypes.c_float)] |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
155 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
156 class CColor(ctypes.Structure): |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
157 _fields_ = [ |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
158 ("r", ctypes.c_ubyte), |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
159 ("g", ctypes.c_ubyte), |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
160 ("b", ctypes.c_ubyte), |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
161 ("a", ctypes.c_ubyte), |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
162 ] |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
163 |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
164 class CVertColor(ctypes.Structure): |
0f659c7675f6
Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents:
66
diff
changeset
|
165 _fields_ = [("vert", CVert), ("color", CColor)] |