… | |
… | |
24 | |
24 | |
25 | sub glinit { |
25 | sub glinit { |
26 | # nuke all gl context data |
26 | # nuke all gl context data |
27 | |
27 | |
28 | $app = new SDL::App |
28 | $app = new SDL::App |
|
|
29 | -flags => SDL_ANYFORMAT | SDL_HWSURFACE, |
29 | -title => "Crossfire+ Client", |
30 | -title => "Crossfire+ Client", |
30 | -width => $WIDTH, |
31 | -width => $WIDTH, |
31 | -height => $HEIGHT, |
32 | -height => $HEIGHT, |
32 | -opengl => 1, |
33 | -opengl => 1, |
33 | -red_size => 8, |
34 | -red_size => 8, |
34 | -green_size => 8, |
35 | -green_size => 8, |
35 | -blue_size => 8, |
36 | -blue_size => 8, |
36 | -double_buffer => 1, |
37 | -double_buffer => 1, |
37 | -resizeable => 0; |
38 | -resizeable => 0; |
38 | |
39 | |
39 | glEnable GL_TEXTURE_2D; |
40 | glEnable GL_TEXTURE_2D; |
|
|
41 | # glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE; |
40 | glShadeModel GL_FLAT; |
42 | glShadeModel GL_FLAT; |
41 | glDisable GL_DEPTH_TEST; |
43 | glDisable GL_DEPTH_TEST; |
42 | glMatrixMode GL_PROJECTION; |
44 | glMatrixMode GL_PROJECTION; |
|
|
45 | glBlendFunc GL_SRC_ALPHA, GL_ZERO; |
|
|
46 | glEnable GL_BLEND; |
43 | |
47 | |
44 | glLoadIdentity; |
48 | glLoadIdentity; |
45 | glOrtho 0, $WIDTH / 32, $HEIGHT / 32, 0, -1 , 1; |
49 | glOrtho 0, $WIDTH / 32, $HEIGHT / 32, 0, -1 , 1; |
46 | |
50 | |
47 | #glViewport 0, 0, $WIDTH, $HEIGHT; |
|
|
48 | # re-bind all textures |
51 | # re-bind all textures |
49 | } |
52 | } |
50 | |
53 | |
51 | sub refresh { |
54 | sub refresh { |
52 | glClearColor 0.5, 0.5, 0.7, 0; |
55 | glClearColor 0, 0, 0, 0; |
53 | glClear GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT; |
56 | glClear GL_COLOR_BUFFER_BIT; |
54 | |
57 | |
55 | my $map = $conn->{map}; |
58 | my $map = $conn->{map}; |
56 | |
59 | |
57 | for my $x (0 .. $conn->{mapw} - 1) { |
60 | for my $x (0 .. $conn->{mapw} - 1) { |
58 | for my $y (0 .. $conn->{maph} - 1) { |
61 | for my $y (0 .. $conn->{maph} - 1) { |
59 | |
62 | |
60 | my $cell = $map->[$x][$y] |
63 | my $cell = $map->[$x][$y] |
61 | or next; |
64 | or next; |
|
|
65 | |
|
|
66 | # my $darkness = $cell->[3] * (1 / 255); |
|
|
67 | # glColor $darkness, $darkness, $darkness; |
62 | |
68 | |
63 | for my $num (grep $_, $cell->[0], $cell->[1], $cell->[2]) { |
69 | for my $num (grep $_, $cell->[0], $cell->[1], $cell->[2]) { |
64 | my $tex = $conn->{face}[$num]{texture} || 0; |
70 | my $tex = $conn->{face}[$num]{texture} || 0; |
65 | |
71 | |
66 | glBindTexture GL_TEXTURE_2D, $tex; |
72 | glBindTexture GL_TEXTURE_2D, $tex; |
67 | |
73 | |
68 | glBegin GL_QUADS; |
74 | glBegin GL_QUADS; |
69 | glTexCoord 0, 0; glVertex $x, $y; |
75 | glTexCoord 0, 0; glVertex $x, $y; |
|
|
76 | glTexCoord 0, 1; glVertex $x, $y + 1; |
|
|
77 | glTexCoord 1, 1; glVertex $x + 1, $y + 1; |
70 | glTexCoord 1, 0; glVertex $x + 0.9, $y; |
78 | glTexCoord 1, 0; glVertex $x + 1, $y; |
71 | glTexCoord 1, 1; glVertex $x + 0.9, $y + 0.9; |
|
|
72 | glTexCoord 0, 1; glVertex $x, $y + 0.9; |
|
|
73 | glEnd; |
79 | glEnd; |
74 | } |
80 | } |
75 | } |
81 | } |
76 | } |
82 | } |
77 | |
83 | |
… | |
… | |
164 | $face->{texture} = $tex; |
170 | $face->{texture} = $tex; |
165 | |
171 | |
166 | glBindTexture GL_TEXTURE_2D, $tex; |
172 | glBindTexture GL_TEXTURE_2D, $tex; |
167 | my $glerr=glGetError(); die "a: ".gluErrorString($glerr)."\n" if $glerr; |
173 | my $glerr=glGetError(); die "a: ".gluErrorString($glerr)."\n" if $glerr; |
168 | |
174 | |
169 | # glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR; |
175 | glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR; |
170 | # glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR; |
176 | glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR;#_MIPMAP_LINEAR; |
|
|
177 | glTexParameter GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP; |
|
|
178 | glTexParameter GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP; |
171 | |
179 | |
172 | $surface->rgba; |
180 | $surface->rgba; |
173 | |
181 | |
174 | glTexImage2D GL_TEXTURE_2D, 0, |
182 | glTexImage2D GL_TEXTURE_2D, 0, |
175 | 4, # components |
183 | 4, # components |