ClanLib  2.3.7
graphic_context_provider.h
Go to the documentation of this file.
1 /*
2 ** ClanLib SDK
3 ** Copyright (c) 1997-2011 The ClanLib Team
4 **
5 ** This software is provided 'as-is', without any express or implied
6 ** warranty. In no event will the authors be held liable for any damages
7 ** arising from the use of this software.
8 **
9 ** Permission is granted to anyone to use this software for any purpose,
10 ** including commercial applications, and to alter it and redistribute it
11 ** freely, subject to the following restrictions:
12 **
13 ** 1. The origin of this software must not be misrepresented; you must not
14 ** claim that you wrote the original software. If you use this software
15 ** in a product, an acknowledgment in the product documentation would be
16 ** appreciated but is not required.
17 ** 2. Altered source versions must be plainly marked as such, and must not be
18 ** misrepresented as being the original software.
19 ** 3. This notice may not be removed or altered from any source distribution.
20 **
21 ** Note: Some of the libraries ClanLib may link to may have additional
22 ** requirements or restrictions.
23 **
24 ** File Author(s):
25 **
26 ** Magnus Norddahl
27 ** Harry Storbacka
28 */
29 
32 
33 #pragma once
34 
35 #include "../api_display.h"
36 #include "../../Core/System/sharedptr.h"
37 #include "../../Core/Text/string_types.h"
38 #include "../Render/graphic_context.h"
39 #include "../Render/primitives_array.h"
40 #include "../Render/texture.h"
41 #include "../../Core/Math/mat4.h"
42 
43 class CL_Texture;
44 class CL_Stencil;
45 class CL_TextureProvider;
46 class CL_FontProvider;
47 class CL_BlendMode;
49 class CL_Font;
57 class CL_FontDescription;
59 
64 {
65 public:
66  struct VertexData
67  {
68  int size;
70  int stride;
73  union
74  {
75  void *data;
76  unsigned char value_ubyte[4];
77  char value_byte[4];
78  unsigned short value_ushort[4];
79  short value_short[4];
80  unsigned int value_uint[4];
81  int value_int[4];
82  float value_float[4];
84  };
85  };
86 
91 };
92 
97 {
100 
101 public:
102  virtual ~CL_GraphicContextProvider() { return; }
103 
107 
108 public:
110  virtual int get_max_attributes() = 0;
111 
113 
115  virtual CL_Size get_max_texture_size() const = 0;
116 
118  virtual int get_width() const = 0;
119 
121  virtual int get_height() const = 0;
122 
126 
127 public:
129  virtual void destroy() = 0;
130 
132  virtual CL_PixelBuffer get_pixeldata(const CL_Rect& rect, CL_TextureFormat pixel_format, bool clamp) const = 0;
133 
135  virtual CL_TextureProvider *alloc_texture(CL_TextureDimensions texture_dimensions) = 0;
136 
138  virtual CL_OcclusionQueryProvider *alloc_occlusion_query() = 0;
139 
141  virtual CL_ProgramObjectProvider *alloc_program_object() = 0;
142 
144  virtual CL_ShaderObjectProvider *alloc_shader_object() = 0;
145 
147  virtual CL_FrameBufferProvider *alloc_frame_buffer() = 0;
148 
150  virtual CL_RenderBufferProvider *alloc_render_buffer() = 0;
151 
153  virtual CL_VertexArrayBufferProvider *alloc_vertex_array_buffer() = 0;
154 
156  virtual CL_ElementArrayBufferProvider *alloc_element_array_buffer() = 0;
157 
159  virtual CL_PixelBufferProvider *alloc_pixel_buffer() = 0;
160 
162  virtual void set_program_object(CL_StandardProgram standard_program) = 0;
163 
168  virtual void set_program_object(const CL_ProgramObject &program, int program_matrix_flags) = 0;
169 
171  virtual void reset_program_object() = 0;
172 
174  virtual void set_texture(int unit_index, const CL_Texture &texture) = 0;
175 
177  virtual void reset_texture(int unit_index, const CL_Texture &texture) = 0;
178 
180  virtual void set_frame_buffer(const CL_FrameBuffer &write_buffer, const CL_FrameBuffer &read_buffer) = 0;
181 
183  virtual void reset_frame_buffer() = 0;
184 
186  virtual void set_blend_mode(const CL_BlendMode &blendmode) = 0;
187 
189  virtual void set_buffer_control(const CL_BufferControl &buffer_control) = 0;
190 
192  virtual void set_pen(const CL_Pen &pen) = 0;
193 
195  virtual void set_polygon_rasterizer(const CL_PolygonRasterizer &raster) = 0;
196 
198  virtual void draw_primitives(CL_PrimitivesType type, int num_vertices, const CL_PrimitivesArrayData * const prim_array) = 0;
199 
201  virtual void set_primitives_array(const CL_PrimitivesArrayData * const prim_array) = 0;
202 
204  virtual void draw_primitives_array(CL_PrimitivesType type, int offset, int num_vertices) = 0;
205 
207  virtual void draw_primitives_array_instanced(CL_PrimitivesType type, int offset, int num_vertices, int instance_count) = 0;
208 
214  virtual void draw_primitives_elements(CL_PrimitivesType type, int count, unsigned int *indices) = 0;
215 
221  virtual void draw_primitives_elements(CL_PrimitivesType type, int count, unsigned short *indices) = 0;
222 
228  virtual void draw_primitives_elements(CL_PrimitivesType type, int count, unsigned char *indices) = 0;
229 
236  virtual void draw_primitives_elements_instanced(CL_PrimitivesType type, int count, unsigned int *indices, int instance_count) = 0;
237 
244  virtual void draw_primitives_elements_instanced(CL_PrimitivesType type, int count, unsigned short *indices, int instance_count) = 0;
245 
252  virtual void draw_primitives_elements_instanced(CL_PrimitivesType type, int count, unsigned char *indices, int instance_count) = 0;
253 
261  virtual void draw_primitives_elements(CL_PrimitivesType type, int count, CL_ElementArrayBufferProvider *array_provider, CL_VertexAttributeDataType indices_type, void *offset) = 0;
262 
270  virtual void draw_primitives_elements_instanced(CL_PrimitivesType type, int count, CL_ElementArrayBufferProvider *array_provider, CL_VertexAttributeDataType indices_type, void *offset, int instance_count) = 0;
271 
273  virtual void primitives_array_freed(const CL_PrimitivesArrayData * const prim_array) = 0;
274 
276  virtual void reset_primitives_array() = 0;
277 
279  virtual void draw_pixels(CL_GraphicContext &gc, float x, float y, float zoom_x, float zoom_y, const CL_PixelBuffer &pixel_buffer, const CL_Rect &src_rect, const CL_Colorf &color) = 0;
280 
282  virtual void set_clip_rect(const CL_Rect &rect) = 0;
283 
285  virtual void reset_clip_rect() = 0;
286 
288  virtual void clear(const CL_Colorf &color) = 0;
289 
293  virtual void clear_depth(float value) = 0;
294 
298  virtual void clear_stencil(int value) = 0;
299 
301  virtual void set_map_mode(CL_MapMode mode) = 0;
302 
304  virtual void set_viewport(const CL_Rectf &viewport) = 0;
305 
307  virtual void set_projection(const CL_Mat4f &matrix) = 0;
308 
310  virtual void set_modelview(const CL_Mat4f &matrix) = 0;
311 
315 
316 private:
318 };
319