1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-11-20 11:54:48 +00:00

added some comments in drawing.cpp

This commit is contained in:
Zeno Rogue 2020-03-27 21:32:43 +01:00
parent edbd71cdff
commit eadd1d90c0

View File

@ -35,28 +35,51 @@ static const int POLY_TRIANGLES = (1<<22); // made of TRIANGLES, not TRIANG
static const int POLY_INTENSE = (1<<23); // extra intense colors static const int POLY_INTENSE = (1<<23); // extra intense colors
static const int POLY_DEBUG = (1<<24); // debug this shape static const int POLY_DEBUG = (1<<24); // debug this shape
/** HyperRogue map rendering functions do not draw its data immediately; instead, they call the 'queue' functions
* which store the data to draw in hr::ptds. This approach lets us draw the elements in the correct order.
*/
struct drawqueueitem { struct drawqueueitem {
/** The higher the priority, the earlier we should draw this object. */
PPR prio; PPR prio;
/** Color of this object. */
color_t color; color_t color;
/** Some priorities need extra sorting inside the given class. This attribute is used to specify the inner sorting priority. */
int subprio; int subprio;
/** Draw the object. */
virtual void draw() = 0; virtual void draw() = 0;
/** Draw the object as background. */
virtual void draw_back() {} virtual void draw_back() {}
virtual void draw_pre() {}
virtual ~drawqueueitem() {} virtual ~drawqueueitem() {}
void draw_darker(); /** When minimizing OpenGL calls, we need to group items of the same color, etc. together. This value is used as an extra sorting key. */
virtual color_t outline_group() = 0; virtual color_t outline_group() = 0;
}; };
/** Drawqueueitem used to draw polygons. The majority of drawqueueitems fall here. */
struct dqi_poly : drawqueueitem { struct dqi_poly : drawqueueitem {
/** see hr::band_shift */
ld band_shift; ld band_shift;
/** matrix used to transform the model */
transmatrix V; transmatrix V;
/** a vector of GL vertices where the model is stored */
const vector<glvertex> *tab; const vector<glvertex> *tab;
int offset, cnt, offset_texture; /** the where does the model start */
int offset;
/** how many vertices in the model */
int cnt;
/** the offset in the texture vertices */
int offset_texture;
/** outline color */
color_t outline; color_t outline;
/** width of boundary lines */
double linewidth; double linewidth;
/** various flags */
int flags; int flags;
/** Texture data for textured polygons. Requires POLY_TRIANGLES flag */
struct basic_textureinfo *tinf; struct basic_textureinfo *tinf;
/** used to find the correct side to draw in spherical geometries */
hyperpoint intester; hyperpoint intester;
/** temporarily cached data */
float cache; float cache;
void draw(); void draw();
void gldraw(); void gldraw();
@ -64,31 +87,54 @@ struct dqi_poly : drawqueueitem {
virtual color_t outline_group() { return outline; } virtual color_t outline_group() { return outline; }
}; };
/** Drawqueueitem used to draw lines */
struct dqi_line : drawqueueitem { struct dqi_line : drawqueueitem {
/** see hr::band_shift */
ld band_shift; ld band_shift;
/** starting and ending point */
hyperpoint H1, H2; hyperpoint H1, H2;
/** how accurately to render the line */
int prf; int prf;
/** width of this line */
double width; double width;
void draw(); void draw();
void draw_back(); void draw_back();
virtual color_t outline_group() { return color; } virtual color_t outline_group() { return color; }
}; };
/** Drawqueueitem used to draw strings, using sccreen coodinates */
struct dqi_string : drawqueueitem { struct dqi_string : drawqueueitem {
/** text */
string str; string str;
int x, y, shift, size, frame; /** onscreen position */
int x, y;
/** shift in anaglyph mode */
int shift;
/** font size */
int size;
/** frame color */
int frame;
/** alignment (0-8-16) */
int align; int align;
void draw(); void draw();
virtual color_t outline_group() { return 1; } virtual color_t outline_group() { return 1; }
}; };
/** Drawqueueitem used to draw circles, using screen coordinates */
struct dqi_circle : drawqueueitem { struct dqi_circle : drawqueueitem {
int x, y, size, fillcolor; /* onscreen position */
int x, y;
/* circle size */
int size;
/* which color should it be filled with */
color_t fillcolor;
/* width of the circle */
double linewidth; double linewidth;
void draw(); void draw();
virtual color_t outline_group() { return 2; } virtual color_t outline_group() { return 2; }
}; };
/** Perform an arbitrary action. May temporarily change the model, etc. */
struct dqi_action : drawqueueitem { struct dqi_action : drawqueueitem {
reaction_t action; reaction_t action;
dqi_action(const reaction_t& a) : action(a) {} dqi_action(const reaction_t& a) : action(a) {}
@ -97,6 +143,9 @@ struct dqi_action : drawqueueitem {
}; };
#endif #endif
/** Return a reference to i-th component of col.
* \arg i For colors with alpha, A=0, R=1, G=2, B=3. For colors without alpha, R=0, G=1, B=2.
*/
EX unsigned char& part(color_t& col, int i) { EX unsigned char& part(color_t& col, int i) {
unsigned char* c = (unsigned char*) &col; unsigned char* c = (unsigned char*) &col;
#if ISMOBILE #if ISMOBILE