/usr/include/crystalspace-2.0/ivideo/graph2d.h is in libcrystalspace-dev 2.0+dfsg-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 | /*
Copyright (C) 2001 by Jorrit Tyberghein
Copyright (C) 1998-2000 by Andrew Zabolotny <bit@eltech.ru>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __CS_IVIDEO_GRAPH2D_H__
#define __CS_IVIDEO_GRAPH2D_H__
/**\file
* 2D graphics interface
*/
/**
* \addtogroup gfx2d
* @{ */
#include "csutil/scf.h"
#include "csgfx/rgbpixel.h"
#include "ivideo/cursor.h"
struct iImage;
struct iFontServer;
struct iFont;
struct iNativeWindow;
struct iGraphics2D;
class csRect;
class csVector3;
namespace CS {
namespace Math {
class Matrix4;
} // namespace Math
} // namespace CS
/// iGraphics2D::Write() flags.
enum
{
/**
* Write by baseline, \p x and \p y are treated as the pen position on
* a baseline.
*/
CS_WRITE_BASELINE = (1 << 0),
/**
* Don't use anti-aliased glyphs.
*/
CS_WRITE_NOANTIALIAS = (1 << 1)
};
/// Simple 2D pixel coordinate
struct csPixelCoord
{
/// X component
int x;
/// Y component
int y;
};
/**
* This is the interface for 2D renderer. The 2D renderer is responsible
* for all 2D operations such as creating the window, switching pages,
* returning pixel format and so on.
*
* Main creators of instances implementing this interface:
* - OpenGL/Windows canvas plugin (crystalspace.graphics2d.glwin32)
* - OpenGL/X11 canvas plugin (crystalspace.graphics2d.glx)
* - Null 2D canvas plugin (crystalspace.graphics2d.null)
* - Some others.
* - Note that it is the 3D renderer that will automatically create
* the right instance of the canvas that it requires.
*
* Main ways to get pointers to this interface:
* - csQueryRegistry<iGraphics2D>()
* - iGraphics3D::GetDriver2D()
*
* Main users of this interface:
* - 3D renderers (iGraphics3D implementations)
*/
struct iGraphics2D : public virtual iBase
{
SCF_INTERFACE (iGraphics2D, 4, 0, 2);
/// Open the device.
virtual bool Open () = 0;
/// Close the device.
virtual void Close () = 0;
/// Return the width of the framebuffer.
virtual int GetWidth () = 0;
/// Return the height of the framebuffer.
virtual int GetHeight () = 0;
/// Return color depth of the framebuffer.
virtual int GetColorDepth () = 0;
/**
* Find an RGB (0..255) color. The actual color bytes are returned.
*
* Use returned value for color arguments in iGraphics2D.
*/
virtual int FindRGB (int r, int g, int b, int a = 255) = 0;
/**
* Retrieve the R,G,B tuple for a given color number.
*/
virtual void GetRGB (int color, int& r, int& g, int& b) = 0;
/**
* Retrieve the R,G,B,A tuple for a given color number.
*/
virtual void GetRGB (int color, int& r, int& g, int& b, int& a) = 0;
/**
* Set clipping rectangle.
* The clipping rectangle is inclusive the top and left edges and exclusive
* for the right and bottom borders.
*/
virtual void SetClipRect (int nMinX, int nMinY, int nMaxX, int nMaxY) = 0;
/// Retrieve clipping rectangle
virtual void GetClipRect(int& nMinX, int& nMinY, int& nMaxX, int& nMaxY) = 0;
/**
* This routine should be called before any draw operations.
* It should return true if graphics context is ready.
*/
virtual bool BeginDraw () = 0;
/// This routine should be called when you finished drawing.
virtual void FinishDraw () = 0;
/**
* Flip video pages (or dump backbuffer into framebuffer). The area
* parameter is only a hint to the canvas driver. Changes outside the
* rectangle may or may not be printed as well.
*/
virtual void Print (csRect const* pArea) = 0;
/// Clear backbuffer.
virtual void Clear (int color) = 0;
/// Clear all video pages.
virtual void ClearAll (int color) = 0;
/// Draw a line.
virtual void DrawLine(float x1, float y1, float x2, float y2, int color) = 0;
/// Draw a box
virtual void DrawBox (int x, int y, int w, int h, int color) = 0;
/**
* Clip a line against given rectangle.
* Function returns true if line is not visible.
*/
virtual bool ClipLine (float& x1, float& y1, float& x2, float& y2,
int xmin, int ymin, int xmax, int ymax) = 0;
/// Draw a pixel.
virtual void DrawPixel (int x, int y, int color) = 0;
/// Draw an array of pixel coordinates with the given color.
virtual void DrawPixels(csPixelCoord const* pixels, int num_pixels,
int color) = 0;
/// Blit a memory block. Format of the image is RGBA in bytes. Row by row.
virtual void Blit (int x, int y, int width, int height,
unsigned char const* data) = 0;
/// Query pixel R,G,B at given screen location
virtual void GetPixel (int x, int y, uint8 &oR, uint8 &oG, uint8 &oB) = 0;
/// As GetPixel() above, but with alpha
virtual void GetPixel (int x, int y, uint8 &oR, uint8 &oG, uint8 &oB,
uint8 &oA) = 0;
/**
* Write a text string into the back buffer. A value of -1 for \p bg
* color will not draw the background.
* \remarks \p str is expected to be UTF-8 encoded.
* \remarks For transparent backgrounds, it is recommended to obtain a color
* value from FindRGB() that has the same R, G, B components as the
* foreground color, but an alpha component of 0.
*/
virtual void Write (iFont *font, int x, int y, int fg, int bg,
const char *str, uint flags = 0) = 0;
/// Enable/disable canvas resizing
virtual void AllowResize (bool iAllow) = 0;
/// Resize the canvas
virtual bool Resize (int w, int h) = 0;
/// Get the active font server (does not do IncRef())
virtual iFontServer *GetFontServer () = 0;
/**
* Perform a system specific exension.<p>
* The command is a string; any arguments may follow.
* There is no way to guarantee the uniquiness of
* commands, so please try to use descriptive command names rather
* than "a", "b" and so on...
*/
virtual bool PerformExtension (char const* command, ...) = 0;
/**
* Perform a system specific exension.<p>
* Just like PerformExtension() except that the command arguments are passed
* as a `va_list'.
*/
virtual bool PerformExtensionV (char const* command, va_list) = 0;
/// Do a screenshot: return a new iImage object
virtual csPtr<iImage> ScreenShot () = 0;
/**
* Get the native window corresponding with this canvas.
* If this is an off-screen canvas then this will return 0.
*/
virtual iNativeWindow* GetNativeWindow () = 0;
/// Returns 'true' if the program is being run full-screen.
virtual bool GetFullScreen () = 0;
/**
* Change the fullscreen state of the canvas.
*/
virtual void SetFullScreen (bool b) = 0;
/// Set mouse position (relative to top-left of CS window).
virtual bool SetMousePosition (int x, int y) = 0;
/**
* Set mouse cursor to one of predefined shape classes
* (see csmcXXX enum above). If a specific mouse cursor shape
* is not supported, return 'false'; otherwise return 'true'.
* If system supports it the cursor should be set to its nearest
* system equivalent depending on iShape argument and the routine
* should return "true".
*/
virtual bool SetMouseCursor (csMouseCursorID iShape) = 0;
/**
* Set mouse cursor using an image. If the operation is unsupported,
* \c false is returned, otherwise \c true.
*
* \remarks
* If setting a custom mouse is not supported no mouse cursor "emulation"
* is done in the canvas. You can use the custom cursor plugin (see
* iCursor) for automatic mouse cursor emulation in case the canvas
* doesn't support it, or do it yourself (after everything was drawn,
* draw the desired mouse cursor image at the current mouse cursor
* position).
*
* On some platforms there are only monochrome pointers available. In this
* all black colors in the image will become the value of \a bg and all
* non-black colors will become \a fg. This behaviour can be disabled
* by setting the <tt>Video.SystemMouseCursor</tt> configuration key to
* \c rgbaonly.
*/
virtual bool SetMouseCursor (iImage *image, const csRGBcolor* keycolor = 0,
int hotspot_x = 0, int hotspot_y = 0,
csRGBcolor fg = csRGBcolor(255,255,255),
csRGBcolor bg = csRGBcolor(0,0,0)) = 0;
/**
* Set gamma value (if supported by canvas). By default this is 1.
* Smaller values are darker. If the canvas doesn't support gamma
* then this function will return false.
*/
virtual bool SetGamma (float gamma) = 0;
/**
* Get gamma value.
*/
virtual float GetGamma () const = 0;
/**
* Get the name of the canvas
*/
virtual const char* GetName () const = 0;
/**
* Write a text string into the back buffer. A value of -1 for \p bg
* color will not draw the background.
* \remarks For transparent backgrounds, it is recommended to obtain a color
* value from FindRGB() that has the same R, G, B components as the
* foreground color, but an alpha component of 0.
*/
virtual void Write (iFont *font, int x, int y, int fg, int bg,
const wchar_t* str, uint flags = 0) = 0;
/**
* Set the viewport (the rectangle of the framebuffer to draw to).
* \param left Left of the viewport. X=0 will map to this.
* \param top Right of the viewport. Y=0 will map to this.
* \param width Width of the viewport.
* \param height Height of the viewport.
*/
virtual void SetViewport (int left, int top, int width, int height) = 0;
/// Get the currently set viewport.
virtual void GetViewport (int& left, int& top, int& width, int& height) = 0;
/// Get the dimensions of the framebuffer.
virtual void GetFramebufferDimensions (int& width, int& height) = 0;
/// Get a string containing the hardware renderer.
virtual const char* GetHWRenderer () = 0;
/// Get a string containing the OpenGL version.
virtual const char* GetHWGLVersion () = 0;
/// Get a string containing the vendor info.
virtual const char* GetHWVendor () = 0;
/**
* Draw a line between two points expressed in camera space.
*
* \warning This version of the method will only work for iPerspectiveCamera's.
* For other camera's, you should use the other DrawLineProjected() method.
*
* \param v1 Start point of the line.
* \param v2 End point of the line.
* \param fov Field of View to use for the projection. Typically, you would
* want to use the one returned by iPerspectiveCamera::GetFOV().
* \param color Color of the line.
*/
virtual void DrawLineProjected (const csVector3& v1, const csVector3& v2,
float fov, int color) = 0;
/**
* Draw a line between two points expressed in camera space.
* \param v1 Start point of the line.
* \param v2 End point of the line.
* \param projection Projection matrix to use for the camera. Typically, you
* would want to use the one returned by iCamera::GetProjectionMatrix().
* \param color Color of the line.
*/
virtual void DrawLineProjected (const csVector3& v1, const csVector3& v2,
const CS::Math::Matrix4& projection, int color) = 0;
};
/** @} */
#endif // __CS_IVIDEO_GRAPH2D_H__
|