|
|
|
@@ -3,7 +3,7 @@ |
|
|
|
* Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies |
|
|
|
* Copyright (C) 2000 Christian Zander <phoenix@minion.de> |
|
|
|
* Copyright (C) 2015 Nedko Arnaudov |
|
|
|
* Copyright (C) 2016-2019 Filipe Coelho <falktx@falktx.com> |
|
|
|
* Copyright (C) 2016-2022 Filipe Coelho <falktx@falktx.com> |
|
|
|
* |
|
|
|
* This program is free software; you can redistribute it and/or |
|
|
|
* modify it under the terms of the GNU Lesser General Public |
|
|
|
@@ -48,53 +48,29 @@ void draw_rectangle(GLfloat x1, GLfloat y1, GLfloat z1, GLfloat x2, GLfloat y2, |
|
|
|
} |
|
|
|
|
|
|
|
static inline |
|
|
|
void draw_bar(GLenum mode, GLfloat x_offset, GLfloat z_offset, GLfloat height, GLfloat red, GLfloat green, GLfloat blue) |
|
|
|
void draw_bar(GLfloat x_offset, GLfloat z_offset, GLfloat height, GLfloat red, GLfloat green, GLfloat blue) |
|
|
|
{ |
|
|
|
const GLfloat width = 0.1; |
|
|
|
static constexpr const GLfloat width = 0.1; |
|
|
|
|
|
|
|
if (mode == GL_POINT) |
|
|
|
glColor3f(0.2, 1.0, 0.2); |
|
|
|
// left |
|
|
|
glColor3f(0.25 * red, 0.25 * green, 0.25 * blue); |
|
|
|
draw_rectangle(x_offset, 0.0, z_offset , x_offset, height, z_offset + 0.1); |
|
|
|
|
|
|
|
if (mode != GL_POINT) |
|
|
|
{ |
|
|
|
glColor3f(red,green,blue); |
|
|
|
draw_rectangle(x_offset, height, z_offset, x_offset + width, height, z_offset + 0.1); |
|
|
|
} |
|
|
|
draw_rectangle(x_offset, 0, z_offset, x_offset + width, 0, z_offset + 0.1); |
|
|
|
// right |
|
|
|
glColor3f(0.5 * red, 0.5 * green, 0.5 * blue); |
|
|
|
draw_rectangle(x_offset, 0.0, z_offset + 0.1, x_offset + width, height, z_offset + 0.1); |
|
|
|
|
|
|
|
if (mode != GL_POINT) |
|
|
|
{ |
|
|
|
glColor3f(0.5 * red, 0.5 * green, 0.5 * blue); |
|
|
|
draw_rectangle(x_offset, 0.0, z_offset + 0.1, x_offset + width, height, z_offset + 0.1); |
|
|
|
} |
|
|
|
draw_rectangle(x_offset, 0.0, z_offset, x_offset + width, height, z_offset ); |
|
|
|
|
|
|
|
if (mode != GL_POINT) |
|
|
|
{ |
|
|
|
glColor3f(0.25 * red, 0.25 * green, 0.25 * blue); |
|
|
|
draw_rectangle(x_offset, 0.0, z_offset , x_offset, height, z_offset + 0.1); |
|
|
|
} |
|
|
|
draw_rectangle(x_offset + width, 0.0, z_offset , x_offset + width, height, z_offset + 0.1); |
|
|
|
// top |
|
|
|
glColor3f(red, green, blue); |
|
|
|
draw_rectangle(x_offset, height, z_offset, x_offset + width, height, z_offset + 0.1); |
|
|
|
} |
|
|
|
|
|
|
|
struct glBarsState { |
|
|
|
GLenum g_mode; |
|
|
|
GLfloat x_angle, x_speed; |
|
|
|
GLfloat y_angle, y_speed; |
|
|
|
GLfloat z_angle, z_speed; |
|
|
|
GLfloat heights[16][16], cHeights[16][16], scale; |
|
|
|
GLfloat hSpeed; |
|
|
|
|
|
|
|
glBarsState() |
|
|
|
{ |
|
|
|
g_mode = GL_FILL; |
|
|
|
x_angle = 20.0; |
|
|
|
x_speed = 0.0; |
|
|
|
y_angle = 15.0; // was 45 |
|
|
|
y_speed = 0.5; |
|
|
|
z_angle = 0.0; |
|
|
|
z_speed = 0.0; |
|
|
|
|
|
|
|
// Set "Bar Height" |
|
|
|
scale = 1.f / log(256.f); // "Default" / standard |
|
|
|
//scale = 2.f / log(256.f); // "Big" |
|
|
|
@@ -109,35 +85,30 @@ struct glBarsState { |
|
|
|
//hSpeed = 0.2f; // "Very Fast" |
|
|
|
//hSpeed = 0.05f; // "Very Slow" |
|
|
|
|
|
|
|
for (int x = 0; x < 16; x++) |
|
|
|
{ |
|
|
|
for (int y = 0; y < 16; y++) |
|
|
|
cHeights[y][x] = heights[y][x] = 0; |
|
|
|
} |
|
|
|
std::memset(heights, 0, sizeof(heights)); |
|
|
|
std::memset(cHeights, 0, sizeof(cHeights)); |
|
|
|
} |
|
|
|
|
|
|
|
void drawBars() |
|
|
|
void Render() |
|
|
|
{ |
|
|
|
GLfloat x_offset, z_offset, r_base, b_base; |
|
|
|
|
|
|
|
glClear(GL_DEPTH_BUFFER_BIT); |
|
|
|
glPushMatrix(); |
|
|
|
glTranslatef(0.0,-0.5,-5.0); |
|
|
|
glRotatef(x_angle,1.0,0.0,0.0); |
|
|
|
glRotatef(y_angle,0.0,1.0,0.0); |
|
|
|
glRotatef(z_angle,0.0,0.0,1.0); |
|
|
|
glTranslatef(0.0,0.25,-4.0); |
|
|
|
glRotatef(30.0,1.0,0.0,0.0); |
|
|
|
glRotatef(45,0.0,1.0,0.0); |
|
|
|
|
|
|
|
glPolygonMode(GL_FRONT_AND_BACK, g_mode); |
|
|
|
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); |
|
|
|
glBegin(GL_TRIANGLES); |
|
|
|
|
|
|
|
for (int y = 0; y < 16; y++) |
|
|
|
for (int y = 16; --y >= 0;) |
|
|
|
{ |
|
|
|
z_offset = -1.6 + ((15 - y) * 0.2); |
|
|
|
|
|
|
|
b_base = y * (1.0 / 15); |
|
|
|
r_base = 1.0 - b_base; |
|
|
|
|
|
|
|
for (int x = 0; x < 16; x++) |
|
|
|
for (int x = 16; --x >= 0;) |
|
|
|
{ |
|
|
|
x_offset = -1.6 + ((float)x * 0.2); |
|
|
|
if (::fabs(cHeights[y][x]-heights[y][x])>hSpeed) |
|
|
|
@@ -147,51 +118,15 @@ struct glBarsState { |
|
|
|
else |
|
|
|
cHeights[y][x] -= hSpeed; |
|
|
|
} |
|
|
|
draw_bar(g_mode, x_offset, z_offset, |
|
|
|
|
|
|
|
draw_bar(x_offset, z_offset, |
|
|
|
cHeights[y][x], r_base - (float(x) * (r_base / 15.0)), |
|
|
|
(float)x * (1.0 / 15), b_base /*, 16*y+x*/); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
glEnd(); |
|
|
|
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); |
|
|
|
glPopMatrix(); |
|
|
|
} |
|
|
|
|
|
|
|
void Render() |
|
|
|
{ |
|
|
|
glDisable(GL_BLEND); |
|
|
|
glMatrixMode(GL_PROJECTION); |
|
|
|
glPushMatrix(); |
|
|
|
glLoadIdentity(); |
|
|
|
glFrustum(-1, 1, -1, 1, 1.5, 10); |
|
|
|
glMatrixMode(GL_MODELVIEW); |
|
|
|
glPushMatrix(); |
|
|
|
glLoadIdentity(); |
|
|
|
glEnable(GL_DEPTH_TEST); |
|
|
|
glDepthFunc(GL_LESS); |
|
|
|
//glPolygonMode(GL_FRONT, GL_FILL); |
|
|
|
//glPolygonMode(GL_BACK, GL_FILL); |
|
|
|
|
|
|
|
x_angle += x_speed; |
|
|
|
if (x_angle >= 360.0) |
|
|
|
x_angle -= 360.0; |
|
|
|
|
|
|
|
y_angle += y_speed; |
|
|
|
if (y_angle >= 360.0) |
|
|
|
y_angle -= 360.0; |
|
|
|
|
|
|
|
z_angle += z_speed; |
|
|
|
if (z_angle >= 360.0) |
|
|
|
z_angle -= 360.0; |
|
|
|
|
|
|
|
drawBars(); |
|
|
|
|
|
|
|
glPopMatrix(); |
|
|
|
glMatrixMode(GL_PROJECTION); |
|
|
|
glPopMatrix(); |
|
|
|
glDisable(GL_DEPTH_TEST); |
|
|
|
glEnable(GL_BLEND); |
|
|
|
} |
|
|
|
|
|
|
|
void AudioData(const float* pAudioData, int iAudioDataLength) |
|
|
|
|