• R/O
  • HTTP
  • SSH
  • HTTPS

fermisurfer: Commit

fermisurfer Git


Commit MetaInfo

Revision651057f3cab4a24d881086605ece97f2b4187609 (tree)
Zeit2017-08-07 18:29:38
Autormitsuaki1987 <kawamitsuaki@gmai...>
Commitermitsuaki1987

Log Message

Backup

Ändern Zusammenfassung

Diff

--- a/src/draw.c
+++ b/src/draw.c
@@ -40,6 +40,7 @@ THE SOFTWARE.
4040
4141 #include <math.h>
4242 #include "variable.h"
43+#include <stdio.h>
4344 /**
4445 @brief Draw Fermi surfaces
4546
@@ -83,10 +84,6 @@ static void draw_fermi() {
8384 /*
8485 Second, draw each triangle
8586 */
86- glEnableClientState(GL_VERTEX_ARRAY);
87- glEnableClientState(GL_NORMAL_ARRAY);
88- glEnableClientState(GL_COLOR_ARRAY);
89- glEnable(GL_COLOR_MATERIAL);
9087 for (ib = 0; ib < nb; ib++) {
9188 if (draw_band[ib] == 1) {
9289 for (itri = 0; itri < ntri[ib]; ++itri) {
@@ -95,18 +92,14 @@ static void draw_fermi() {
9592 for (k = 0; k < 3; ++k) vertices[k + 3 * i] = kvp_rot[ib][itri][i][k];
9693 for (k = 0; k < 4; ++k) colors[k + 4 * i] = clr[ib][itri][i][k];
9794 }/*for (i = 0; i < 3; ++i)*/
98- glVertexPointer(3, GL_FLOAT, 0, vertices);
99- glNormalPointer(GL_FLOAT, 0, normals);
100- glColorPointer(4, GL_FLOAT, 0,colors);
95+ glVertexPointer(3, GL_FLOAT, 0, vertices);
96+ glNormalPointer(GL_FLOAT, 0, normals);
97+ glColorPointer(4, GL_FLOAT, 0,colors);
10198 glDrawArrays(GL_TRIANGLES, 0, 3);
10299 }/*for (itri = 0; itri < ntri[ib]; ++itri)*/
103100 //glEnd();
104101 }/*if (draw_band[ib] == 1)*/
105102 }/*for (ib = 0; ib < nb; ib++)*/
106- glDisable(GL_COLOR_MATERIAL);
107- glDisableClientState(GL_COLOR_ARRAY);
108- glDisableClientState(GL_NORMAL_ARRAY);
109- glDisableClientState(GL_VERTEX_ARRAY);
110103 /*
111104 Nodeline
112105 */
@@ -141,17 +134,23 @@ static void draw_fermi() {
141134 Second, draw each lines
142135 */
143136 glLineWidth(3.0f*scl);
144- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, black);
145- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, black);
146- glBegin(GL_LINES);
137+ for (i = 0; i < 2; i++) {
138+ for (k = 0; k < 4; k++) colors[k + 4 * i] = black[k];
139+ for (k = 0; k < 2; k++) normals[k + 3 * i] = 0.0f;
140+ normals[2 + 3 * i] = 0.0f;
141+ }
147142 for (ib = 0; ib < nb; ib++) {
148143 if (draw_band[ib] == 1) {
149144 for (itri = 0; itri < nnl[ib]; ++itri) {
150- for (i = 0; i < 2; ++i) glVertex3fv(kvnl_rot[ib][itri][i]);
145+ for (i = 0; i < 2; ++i)
146+ for (k = 0; k < 3; ++k) vertices[k + 3 * i] = kvnl_rot[ib][itri][i][k];
147+ glVertexPointer(3, GL_FLOAT, 0, vertices);
148+ glNormalPointer(GL_FLOAT, 0, normals);
149+ glColorPointer(4, GL_FLOAT, 0, colors);
150+ glDrawArrays(GL_LINES, 0, 2);
151151 }/*for (itri = 0; itri < nnl[ib]; ++itri)*/
152152 }/*if (draw_band[ib] == 1)*/
153153 }/* for (ib = 0; ib < nb; ib++)*/
154- glEnd();
155154 }/*if (nodeline == 1)*/
156155 }/*void draw_fermi*/
157156 /**
@@ -159,7 +158,8 @@ static void draw_fermi() {
159158 */
160159 static void draw_bz_lines() {
161160 int ibzl, i, j;
162- GLfloat bzl2[3], bvec2[3][3], linecolor[4];
161+ GLfloat bzl2[3], bvec2[3][3], linecolor[4], secvec2[3];
162+ GLfloat vertices[300], colors[400], normals[300];
163163 /*
164164 Line color is oposit of BG color
165165 */
@@ -169,13 +169,15 @@ static void draw_bz_lines() {
169169 for (i = 0; i<4; i++) linecolor[i] = black[i];
170170 /**/
171171 glLineWidth(3.0f*scl);
172- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, linecolor);
173- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, linecolor);
172+ for (i = 0; i < 18; ++i) {
173+ for (j = 0; j < 4; j++) colors[j + i * 4] = linecolor[j];
174+ for (j = 0; j < 2; j++) normals[j + i * 3] = 0.0f;
175+ normals[2 + i * 3] = 1.0f;
176+ }/*for (i = 0; i < 2; ++i)*/
174177 /*
175178 First Brillouin zone mode
176179 */
177180 if (fbz == 1) {
178- glBegin(GL_LINES);
179181 for (ibzl = 0; ibzl < nbzl; ++ibzl) {
180182 for (i = 0; i< 2; ++i) {
181183 for (j = 0; j < 3; ++j)
@@ -183,10 +185,13 @@ static void draw_bz_lines() {
183185 + rot[j][1] * bzl[ibzl][i][1]
184186 + rot[j][2] * bzl[ibzl][i][2]
185187 + trans[j];
186- glVertex3fv(bzl2);
188+ for (j = 0; j < 3; j++) vertices[j + 3 * i] = bzl2[j];
187189 }/*for (i = 0; i< 2; ++i)*/
190+ glVertexPointer(3, GL_FLOAT, 0, vertices);
191+ glNormalPointer(GL_FLOAT, 0, normals);
192+ glColorPointer(4, GL_FLOAT, 0, colors);
193+ glDrawArrays(GL_LINES, 0, 2);
188194 }/*for (ibzl = 0; ibzl < nbzl; ++ibzl)*/
189- glEnd();
190195 }/*if (fbz == 1)*/
191196 else {
192197 /*
@@ -197,46 +202,54 @@ static void draw_bz_lines() {
197202 bvec2[i][j] = rot[j][0] * bvec[i][0]
198203 + rot[j][1] * bvec[i][1]
199204 + rot[j][2] * bvec[i][2];
200- }
201- }
202- glBegin(GL_LINE_STRIP);
203- for (i = 0; i<3; ++i) bzl2[i] = trans[i]; glVertex3fv(bzl2);
204- for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[0][i]; glVertex3fv(bzl2);
205- for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[0][i] + bvec2[1][i]; glVertex3fv(bzl2);
206- for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[0][i] + bvec2[1][i] + bvec2[2][i]; glVertex3fv(bzl2);
207- for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[1][i] + bvec2[2][i]; glVertex3fv(bzl2);
208- for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[1][i]; glVertex3fv(bzl2);
209- for (i = 0; i<3; ++i) bzl2[i] = trans[i]; glVertex3fv(bzl2);
210- for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[2][i]; glVertex3fv(bzl2);
211- for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[0][i] + bvec2[2][i]; glVertex3fv(bzl2);
212- for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[0][i] + bvec2[1][i] + bvec2[2][i]; glVertex3fv(bzl2);
213- for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[0][i] + bvec2[2][i]; glVertex3fv(bzl2);
214- for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[0][i]; glVertex3fv(bzl2);
215- for (i = 0; i<3; ++i) bzl2[i] = trans[i]; glVertex3fv(bzl2);
216- for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[2][i]; glVertex3fv(bzl2);
217- for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[1][i] + bvec2[2][i]; glVertex3fv(bzl2);
218- for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[1][i]; glVertex3fv(bzl2);
219- for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[0][i] + bvec2[1][i]; glVertex3fv(bzl2);
220- glEnd();
205+ }/*for (j = 0; j < 3; ++j)*/
206+ }/*for (i = 0; i < 3; ++i)*/
207+ for (i = 0; i<3; ++i) vertices[i] = trans[i];
208+ for (i = 0; i<3; ++i) vertices[i+3] = trans[i] + bvec2[0][i];
209+ for (i = 0; i<3; ++i) vertices[i+3*2] = trans[i] + bvec2[0][i] + bvec2[1][i];
210+ for (i = 0; i<3; ++i) vertices[i+3*3] = trans[i] + bvec2[0][i] + bvec2[1][i] + bvec2[2][i];
211+ for (i = 0; i<3; ++i) vertices[i+3*4] = trans[i] + bvec2[1][i] + bvec2[2][i];
212+ for (i = 0; i<3; ++i) vertices[i+3*5] = trans[i] + bvec2[1][i];
213+ for (i = 0; i<3; ++i) vertices[i+3*6] = trans[i];
214+ for (i = 0; i<3; ++i) vertices[i+3*7] = trans[i] + bvec2[2][i];
215+ for (i = 0; i<3; ++i) vertices[i+3*8] = trans[i] + bvec2[0][i] + bvec2[2][i];
216+ for (i = 0; i<3; ++i) vertices[i+3*9] = trans[i] + bvec2[0][i] + bvec2[1][i] + bvec2[2][i];
217+ for (i = 0; i<3; ++i) vertices[i+3*10] = trans[i] + bvec2[0][i] + bvec2[2][i];
218+ for (i = 0; i<3; ++i) vertices[i+3*11] = trans[i] + bvec2[0][i];
219+ for (i = 0; i<3; ++i) vertices[i+3*12] = trans[i];
220+ for (i = 0; i<3; ++i) vertices[i+3*13] = trans[i] + bvec2[2][i];
221+ for (i = 0; i<3; ++i) vertices[i+3*14] = trans[i] + bvec2[1][i] + bvec2[2][i];
222+ for (i = 0; i<3; ++i) vertices[i+3*15] = trans[i] + bvec2[1][i];
223+ for (i = 0; i<3; ++i) vertices[i+3*16] = trans[i] + bvec2[0][i] + bvec2[1][i];
224+ glVertexPointer(3, GL_FLOAT, 0, vertices);
225+ glNormalPointer(GL_FLOAT, 0, normals);
226+ glColorPointer(4, GL_FLOAT, 0, colors);
227+ glDrawArrays(GL_LINE_STRIP, 0, 17);
221228 }/*if (fbz != 1)*/
222- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, black);
223229 /*
224230 Section for the 2D Fermi line
225231 */
226232 if (lsection == 1) {
227- glBegin(GL_POLYGON);
228- glNormal3fv(secvec);
229- if (blackback == 1) glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, white);
230- else glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, black);
233+ for (j = 0; j < 3; ++j)
234+ secvec2[j] = rot[j][0] * secvec[0]
235+ + rot[j][1] * secvec[1]
236+ + rot[j][2] * secvec[2];
237+ for (i = 0; i < nbzl2d; ++i) {
238+ for (j = 0; j < 4; j++) colors[j + i * 4] = gray[j];
239+ for (j = 0; j < 3; j++) normals[j + i * 3] = secvec2[j];
240+ }
231241 for (ibzl = 0; ibzl < nbzl2d; ++ibzl) {
232242 for (j = 0; j < 3; ++j)
233243 bzl2[j] = rot[j][0] * bzl2d[ibzl][0]
234244 + rot[j][1] * bzl2d[ibzl][1]
235245 + rot[j][2] * bzl2d[ibzl][2]
236246 + trans[j];
237- glVertex3fv(bzl2);
247+ for (j = 0; j < 3; j++)vertices[j + 3 * ibzl] = bzl2[j];
238248 }/*for (ibzl = 0; ibzl < nbzl2d; ++ibzl)*/
239- glEnd();
249+ glVertexPointer(3, GL_FLOAT, 0, vertices);
250+ glNormalPointer(GL_FLOAT, 0, normals);
251+ glColorPointer(4, GL_FLOAT, 0, colors);
252+ glDrawArrays(GL_TRIANGLE_FAN, 0, nbzl2d);
240253 }/*if (lsection == 1)*/
241254 }/*draw bz_lines */
242255 /**
@@ -245,10 +258,9 @@ static void draw_bz_lines() {
245258 */
246259 static void draw_colorbar()
247260 {
248- int i, j;
249- GLfloat mat2, barcolor[4];
261+ int i, j, k;
262+ GLfloat mat2, barcolor[4], vertices[300], normals[300], colors[400];
250263 GLfloat colorbar[13][3] = {
251- { 0.0f, 0.0f, 1.0f },
252264 { -1.0f, -1.0f, 0.0f },
253265 { -1.0f, -1.0f - 0.1f, 0.0f },
254266 { -0.5f, -1.0f, 0.0f },
@@ -264,24 +276,25 @@ static void draw_colorbar()
264276 };
265277 /**/
266278 if (fcscl == 1 || fcscl == 2) {
267- glBegin(GL_TRIANGLE_STRIP);
268- glNormal3fv(colorbar[0]);
269- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, blue);
270- glVertex3fv(colorbar[1]);
271- glVertex3fv(colorbar[2]);
272- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, cyan);
273- glVertex3fv(colorbar[3]);
274- glVertex3fv(colorbar[4]);
275- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, green);
276- glVertex3fv(colorbar[5]);
277- glVertex3fv(colorbar[6]);
278- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, yellow);
279- glVertex3fv(colorbar[7]);
280- glVertex3fv(colorbar[8]);
281- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, red);
282- glVertex3fv(colorbar[9]);
283- glVertex3fv(colorbar[10]);
284- glEnd();
279+ for (i = 0; i < 10; i++) {
280+ for (j = 0; j < 3; j++) vertices[j + i * 3] = colorbar[i][j];
281+ for (j = 0; j < 2; j++) normals[j + i * 3] = 0.0f;
282+ normals[j + i * 3] = 1.0f;
283+ }/*for (i = 0; i < 10; i++)*/
284+ for (j = 0; j < 4; j++) colors[j] = blue[j];
285+ for (j = 0; j < 4; j++) colors[j + 4] = blue[j];
286+ for (j = 0; j < 4; j++) colors[j + 4 * 2] = cyan[j];
287+ for (j = 0; j < 4; j++) colors[j + 4 * 3] = cyan[j];
288+ for (j = 0; j < 4; j++) colors[j + 4 * 4] = green[j];
289+ for (j = 0; j < 4; j++) colors[j + 4 * 5] = green[j];
290+ for (j = 0; j < 4; j++) colors[j + 4 * 6] = yellow[j];
291+ for (j = 0; j < 4; j++) colors[j + 4 * 7] = yellow[j];
292+ for (j = 0; j < 4; j++) colors[j + 4 * 8] = red[j];
293+ for (j = 0; j < 4; j++) colors[j + 4 * 9] = red[j];
294+ glVertexPointer(3, GL_FLOAT, 0, vertices);
295+ glNormalPointer(GL_FLOAT, 0, normals);
296+ glColorPointer(4, GL_FLOAT, 0, colors);
297+ glDrawArrays(GL_TRIANGLE_STRIP, 0, 10);
285298 }/*if (fcscl == 1 || fcscl == 2)*/
286299 else if (fcscl == 4) {
287300 /*
@@ -315,22 +328,28 @@ static void draw_colorbar()
315328 for (j = 0; j<4; ++j) barcolor[j] = red[j] * mat2 + magenta[j] * (1.0f - mat2);
316329 }
317330 /**/
318- glBegin(GL_TRIANGLES);
319- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, barcolor);
320- glNormal3fv(colorbar[0]);
321- glVertex3f(0.15f * cosf((GLfloat)(i + 1) / 60.0f * 6.283185307f),
322- 0.15f * sinf((GLfloat)(i + 1) / 60.0f * 6.283185307f) - 1.0f, 0.0);
323- glVertex3f(0.15f * cosf((GLfloat)i / 60.0f * 6.283185307f),
324- 0.15f * sinf((GLfloat)i / 60.0f * 6.283185307f) - 1.0f, 0.0);
325- glVertex3f(0.2f * cosf((GLfloat)i / 60.0f * 6.283185307f),
326- 0.2f * sinf((GLfloat)i / 60.0f * 6.283185307f) - 1.0f, 0.0);
327- glVertex3f(0.2f * cosf((GLfloat)i / 60.0f * 6.283185307f),
328- 0.2f * sinf((GLfloat)i / 60.0f * 6.283185307f) - 1.0f, 0.0);
329- glVertex3f(0.2f * cosf((GLfloat)(i + 1) / 60.0f * 6.283185307f),
330- 0.2f * sinf((GLfloat)(i + 1) / 60.0f * 6.283185307f) - 1.0f, 0.0);
331- glVertex3f(0.15f * cosf((GLfloat)(i + 1) / 60.0f * 6.283185307f),
332- 0.15f * sinf((GLfloat)(i + 1) / 60.0f * 6.283185307f) - 1.0f, 0.0);
333- glEnd();
331+ vertices[0 + 0 * 3] = 0.15f * cosf((GLfloat)(i + 1) / 60.0f * 6.283185307f);
332+ vertices[1 + 0 * 3] = 0.15f * sinf((GLfloat)(i + 1) / 60.0f * 6.283185307f) - 1.0f;
333+ vertices[0 + 1 * 3] = 0.15f * cosf((GLfloat)i / 60.0f * 6.283185307f);
334+ vertices[1 + 1 * 3] = 0.15f * sinf((GLfloat)i / 60.0f * 6.283185307f) - 1.0f;
335+ vertices[0 + 2 * 3] = 0.2f * cosf((GLfloat)i / 60.0f * 6.283185307f);
336+ vertices[1 + 2 * 3] = 0.2f * sinf((GLfloat)i / 60.0f * 6.283185307f) - 1.0f;
337+ vertices[0 + 3 * 3] = 0.2f * cosf((GLfloat)i / 60.0f * 6.283185307f);
338+ vertices[1 + 3 * 3] = 0.2f * sinf((GLfloat)i / 60.0f * 6.283185307f) - 1.0f;
339+ vertices[0 + 4 * 3] = 0.2f * cosf((GLfloat)(i + 1) / 60.0f * 6.283185307f);
340+ vertices[1 + 4 * 3] = 0.2f * sinf((GLfloat)(i + 1) / 60.0f * 6.283185307f) - 1.0f;
341+ vertices[0 + 5 * 3] = 0.15f * cosf((GLfloat)(i + 1) / 60.0f * 6.283185307f);
342+ vertices[1 + 5 * 3] = 0.15f * sinf((GLfloat)(i + 1) / 60.0f * 6.283185307f) - 1.0f;
343+ for (k = 0; k < 6; k++) {
344+ vertices[2 + k * 3] = 0.0f;
345+ for (j = 0; j < 2; j++) normals[j + k * 3] = 0.0f;
346+ normals[j + k * 3] = 1.0f;
347+ for (j = 0; j < 4; j++) colors[j + k * 4] = barcolor[j];
348+ }/*for (i = 0; i < 10; i++)*/
349+ glVertexPointer(3, GL_FLOAT, 0, vertices);
350+ glNormalPointer(GL_FLOAT, 0, normals);
351+ glColorPointer(4, GL_FLOAT, 0, colors);
352+ glDrawArrays(GL_TRIANGLES, 0, 6);
334353 }/*for (i = 0; i <= 60; i++)*/
335354 }/*else if (fcscl == 4)*/
336355 }/*void draw_colorbar*/
@@ -340,44 +359,42 @@ static void draw_colorbar()
340359 static void draw_circles(
341360 GLfloat dx2d //!< [in] Translation used for the section-mode
342361 ) {
343- int i;
344- GLfloat r;
362+ int i, j;
363+ GLfloat r, vertices[66], colors[88], normals[66];
345364 /**/
346365 r = 0.05f;
347366 /**/
348- if (blackback == 1) {
349- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, white);
350- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, white);
351- }
352- else {
353- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, black);
354- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, black);
355- }
367+ for (i = 0; i < 22; i++) {
368+ for (j = 0; j < 2; j++)normals[j + i * 3] = 0.0f;
369+ normals[2 + i * 3] = 1.0f;
370+ vertices[2 + i * 3] = 0.0f;
371+ if (blackback == 1)for (j = 0; j < 4; j++) colors[j + i * 4] = white[j];
372+ else for (j = 0; j < 4; j++) colors[j + i * 4] = black[j];
373+ }/*for (i = 0; i < 22; i++)*/
356374 /**/
357- glBegin(GL_TRIANGLE_FAN);
358- glNormal3f(0.0, 0.0, 1.0);
359- glVertex3f(0.7f - dx2d, scl, 0.0f);
375+ vertices[0] = 0.7f - dx2d;
376+ vertices[1] = scl;
360377 for (i = 0; i <= 20; i++) {
361- glVertex3f(r * cosf((GLfloat)i / 20.0f * 6.283185307f) + 0.7f - dx2d,
362- r * sinf((GLfloat)i / 20.0f * 6.283185307f) + scl, 0.0f);
363- }
364- glEnd();
378+ vertices[0 + (i + 1) * 3] = r * cosf((GLfloat)i / 20.0f * 6.283185307f) + 0.7f - dx2d;
379+ vertices[1 + (i + 1) * 3] = r * sinf((GLfloat)i / 20.0f * 6.283185307f) + scl;
380+ }/*for (i = 0; i <= 20; i++)*/
381+ glVertexPointer(3, GL_FLOAT, 0, vertices);
382+ glNormalPointer(GL_FLOAT, 0, normals);
383+ glColorPointer(4, GL_FLOAT, 0, colors);
384+ glDrawArrays(GL_TRIANGLE_FAN, 0, 22);
365385 /**/
366- glBegin(GL_TRIANGLE_FAN);
367- glNormal3f(0.0, 0.0, 1.0);
368- glVertex3f(-0.7f - dx2d, scl, 0.0f);
369- for (i = 0; i <= 20; i++) {
370- glVertex3f(r * cosf((GLfloat)i / 20.0f * 6.283185307f) - 0.7f - dx2d,
371- r * sinf((GLfloat)i / 20.0f * 6.283185307f) + scl, 0.0f);
372- }
373- glEnd();
386+ for (i = 0; i < 22; i++) vertices[3 * i] += -1.4f;
387+ glVertexPointer(3, GL_FLOAT, 0, vertices);
388+ glNormalPointer(GL_FLOAT, 0, normals);
389+ glColorPointer(4, GL_FLOAT, 0, colors);
390+ glDrawArrays(GL_TRIANGLE_FAN, 0, 22);
374391 }/*void draw_circles*/
375392 /**
376393 @brief Draw 2D Fermi lines
377394 */
378395 static void draw_fermi_line() {
379- int i, ib, ibzl, itri;
380- GLfloat linecolor[4];
396+ int i, j, ib, ibzl, itri;
397+ GLfloat linecolor[4], vertices[60], normals[60], colors[80];
381398 /*
382399 Draw 2D BZ lines
383400 */
@@ -387,29 +404,36 @@ static void draw_fermi_line() {
387404 for (i = 0; i<4; i++) linecolor[i] = black[i];
388405 /**/
389406 glLineWidth(3.0f*scl);
390- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, linecolor);
391- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, linecolor);
392- glBegin(GL_LINE_LOOP);
393- for (ibzl = 0; ibzl < nbzl2d; ++ibzl) glVertex3fv(bzl2d_proj[ibzl]);
394- glEnd();
407+ for (ibzl = 0; ibzl < nbzl2d; ++ibzl) {
408+ for (i = 0; i < 3; i++) vertices[i + 3 * ibzl] = bzl2d_proj[ibzl][i];
409+ for (i = 0; i < 4; i++) colors[i + 4 * ibzl] = linecolor[i];
410+ for (i = 0; i < 2; i++) normals[i + 3 * ibzl] = 0.0f;
411+ normals[2 + 3 * ibzl] = 1.0f;
412+ }/*for (ibzl = 0; ibzl < nbzl2d; ++ibzl)*/
413+ glVertexPointer(3, GL_FLOAT, 0, vertices);
414+ glNormalPointer(GL_FLOAT, 0, normals);
415+ glColorPointer(4, GL_FLOAT, 0, colors);
416+ glDrawArrays(GL_LINE_LOOP, 0, nbzl2d);
395417 /*
396418 Draw Fermi lines
397419 */
398420 glLineWidth(3.0f*scl);
399- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, black);
400- glBegin(GL_LINES);
401421 for (ib = 0; ib < nb; ib++) {
402422 if (draw_band[ib] == 1) {
403423 for (itri = 0; itri < n2d[ib]; ++itri) {
404424 for (i = 0; i < 2; ++i) {
405- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, clr2d[ib][itri][i]);
406- glVertex3fv(kv2d[ib][itri][i]);
425+ for (j = 0; j < 3; j++) vertices[j + 3 * i] = kv2d[ib][itri][i][j];
426+ for (j = 0; j < 4; j++) colors[j + 4 * i] = clr2d[ib][itri][i][j];
427+ for (j = 0; j < 2; j++) normals[j + 3 * i] = 0.0f;
428+ normals[2 + 3 * i] = 1.0f;
407429 }/*for (i = 0; i < 2; ++i)*/
430+ glVertexPointer(3, GL_FLOAT, 0, vertices);
431+ glNormalPointer(GL_FLOAT, 0, normals);
432+ glColorPointer(4, GL_FLOAT, 0, colors);
433+ glDrawArrays(GL_LINES, 0, 2);
408434 }/*for (itri = 0; itri < nnl[ib]; ++itri)*/
409435 }/*if (draw_band[ib] == 1)*/
410436 }/* for (ib = 0; ib < nb; ib++)*/
411- glEnd();
412- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, black);
413437 }/*void draw_fermi_line*/
414438 /**
415439 @brief Glut Display function
--- a/src/fermisurfer.c
+++ b/src/fermisurfer.c
@@ -97,7 +97,10 @@ void init(void)
9797 glEnable(GL_LIGHT0);
9898 glEnable(GL_LIGHT1);
9999 glEnable(GL_NORMALIZE);
100- //glEnable(GL_COLOR_MATERIAL);
100+ glEnableClientState(GL_VERTEX_ARRAY);
101+ glEnableClientState(GL_NORMAL_ARRAY);
102+ glEnableClientState(GL_COLOR_ARRAY);
103+ glEnable(GL_COLOR_MATERIAL);
101104 /* Menu */
102105 FS_CreateMenu();
103106 } /* init */
Show on old repository browser