Subversion Repositories Games.Descent

Rev

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_ */