Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1 | pmbaty | 1 | /* |
2 | * This file is part of the DXX-Rebirth project <https://www.dxx-rebirth.com/>. |
||
3 | * It is copyright by its individual contributors, as recorded in the |
||
4 | * project's Git history. See COPYING.txt at the top level for license |
||
5 | * terms and a link to the Git history. |
||
6 | */ |
||
7 | /* interface to OpenGL functions |
||
8 | * Added 9/15/99 Matthew Mueller |
||
9 | * Got rid of OpenGL-internal stuff 2004-5-16 Martin Schaffner |
||
10 | */ |
||
11 | |||
12 | #ifndef _OGL_INIT_H_ |
||
13 | #define _OGL_INIT_H_ |
||
14 | |||
15 | #include "dxxsconf.h" |
||
16 | #ifdef _MSC_VER |
||
17 | #include <windows.h> |
||
18 | #include <stddef.h> |
||
19 | #endif |
||
20 | |||
21 | #include "d_gl.h" |
||
22 | #include "dsx-ns.h" |
||
23 | #include "fwd-gr.h" |
||
24 | #include "palette.h" |
||
25 | #include "pstypes.h" |
||
26 | #include "3d.h" |
||
27 | #include "ogl_extensions.h" |
||
28 | #include <array> |
||
29 | |||
30 | #define OGL_TEXFILT_CLASSIC 0 |
||
31 | #define OGL_TEXFILT_UPSCALE 1 |
||
32 | #define OGL_TEXFILT_TRLINEAR 2 |
||
33 | |||
34 | #ifdef __cplusplus |
||
35 | |||
36 | /* we need to export ogl_texture for 2d/font.c */ |
||
37 | struct ogl_texture |
||
38 | { |
||
39 | GLuint handle; |
||
40 | GLint internalformat; |
||
41 | GLenum format; |
||
42 | int w,h,tw,th,lw; |
||
43 | int bytesu; |
||
44 | int bytes; |
||
45 | GLfloat u,v; |
||
46 | GLfloat prio; |
||
47 | int wrapstate; |
||
48 | unsigned long numrend; |
||
49 | }; |
||
50 | |||
51 | extern ogl_texture* ogl_get_free_texture(); |
||
52 | void ogl_init_texture(ogl_texture &t, int w, int h, int flags); |
||
53 | |||
54 | void ogl_init_shared_palette(void); |
||
55 | |||
56 | namespace dcx { |
||
57 | |||
58 | #define OGL_FLAG_MIPMAP (1 << 0) |
||
59 | #define OGL_FLAG_NOCOLOR (1 << 1) |
||
60 | #define OGL_FLAG_ALPHA (1 << 31) // not required for ogl_loadbmtexture, since it uses the BM_FLAG_TRANSPARENT, but is needed for ogl_init_texture. |
||
61 | void ogl_loadbmtexture_f(grs_bitmap &bm, int texfilt, bool texanis, bool edgepad); |
||
62 | void ogl_freebmtexture(grs_bitmap &bm); |
||
63 | |||
64 | void ogl_start_frame(grs_canvas &); |
||
65 | void ogl_end_frame(void); |
||
66 | void ogl_set_screen_mode(void); |
||
67 | |||
68 | struct ogl_colors |
||
69 | { |
||
70 | using array_type = std::array<GLfloat, 16>; |
||
71 | static const array_type white; |
||
72 | const array_type &init(int c) |
||
73 | { |
||
74 | return |
||
75 | #ifdef DXX_CONSTANT_TRUE |
||
76 | DXX_CONSTANT_TRUE(c == -1) |
||
77 | ? white |
||
78 | : DXX_CONSTANT_TRUE(c != -1) |
||
79 | ? init_palette(c) |
||
80 | : |
||
81 | #endif |
||
82 | init_maybe_white(c); |
||
83 | } |
||
84 | const array_type &init_maybe_white(int c); |
||
85 | const array_type &init_palette(unsigned c); |
||
86 | private: |
||
87 | array_type a; |
||
88 | }; |
||
89 | |||
90 | void ogl_urect(grs_canvas &, int left, int top, int right, int bot, color_palette_index color); |
||
91 | bool ogl_ubitmapm_cs(grs_canvas &, int x, int y,int dw, int dh, grs_bitmap &bm,int c, int scale); |
||
92 | bool ogl_ubitmapm_cs(grs_canvas &, int x, int y,int dw, int dh, grs_bitmap &bm, const ogl_colors::array_type &c, int scale); |
||
93 | bool ogl_ubitblt_i(unsigned dw, unsigned dh, unsigned dx, unsigned dy, unsigned sw, unsigned sh, unsigned sx, unsigned sy, const grs_bitmap &src, grs_bitmap &dest, unsigned texfilt); |
||
94 | bool ogl_ubitblt(unsigned w, unsigned h, unsigned dx, unsigned dy, unsigned sx, unsigned sy, const grs_bitmap &src, grs_bitmap &dest); |
||
95 | void ogl_upixelc(const grs_bitmap &, unsigned x, unsigned y, color_palette_index c); |
||
96 | color_palette_index ogl_ugpixel(const grs_bitmap &bitmap, unsigned x, unsigned y); |
||
97 | void ogl_ulinec(grs_canvas &, int left, int top, int right, int bot, int c); |
||
98 | } |
||
99 | #ifdef dsx |
||
100 | namespace dsx { |
||
101 | void ogl_cache_level_textures(); |
||
102 | } |
||
103 | #endif |
||
104 | |||
105 | #include "3d.h" |
||
106 | void _g3_draw_tmap_2(grs_canvas &, unsigned nv, const g3s_point *const *const pointlist, const g3s_uvl *uvl_list, const g3s_lrgb *light_rgb, grs_bitmap &bmbot, grs_bitmap &bm, unsigned orient); |
||
107 | |||
108 | template <std::size_t N> |
||
109 | static inline void g3_draw_tmap_2(grs_canvas &canvas, const unsigned nv, const std::array<cg3s_point *, N> &pointlist, const std::array<g3s_uvl, N> &uvl_list, const std::array<g3s_lrgb, N> &light_rgb, grs_bitmap &bmbot, grs_bitmap &bm, const unsigned orient) |
||
110 | { |
||
111 | static_assert(N <= MAX_POINTS_PER_POLY, "too many points in tmap"); |
||
112 | #ifdef DXX_CONSTANT_TRUE |
||
113 | if (DXX_CONSTANT_TRUE(nv > N)) |
||
114 | DXX_ALWAYS_ERROR_FUNCTION(dxx_trap_tmap_overread, "reading beyond array"); |
||
115 | #endif |
||
116 | if (nv > N) |
||
117 | return; |
||
118 | _g3_draw_tmap_2(canvas, nv, &pointlist[0], &uvl_list[0], &light_rgb[0], bmbot, bm, orient); |
||
119 | } |
||
120 | |||
121 | void ogl_draw_vertex_reticle(int cross,int primary,int secondary,int color,int alpha,int size_offs); |
||
122 | namespace dcx { |
||
123 | void ogl_toggle_depth_test(int enable); |
||
124 | void ogl_set_blending(gr_blend); |
||
125 | unsigned pow2ize(unsigned x);//from ogl.c |
||
126 | } |
||
127 | |||
128 | #endif |
||
129 | |||
130 | #endif /* _OGL_INIT_H_ */ |