summaryrefslogtreecommitdiff
path: root/debug_tools/WatchYourStep/ptxjitplus/inc/paramgl.h
diff options
context:
space:
mode:
Diffstat (limited to 'debug_tools/WatchYourStep/ptxjitplus/inc/paramgl.h')
-rw-r--r--debug_tools/WatchYourStep/ptxjitplus/inc/paramgl.h308
1 files changed, 308 insertions, 0 deletions
diff --git a/debug_tools/WatchYourStep/ptxjitplus/inc/paramgl.h b/debug_tools/WatchYourStep/ptxjitplus/inc/paramgl.h
new file mode 100644
index 0000000..1c42b0b
--- /dev/null
+++ b/debug_tools/WatchYourStep/ptxjitplus/inc/paramgl.h
@@ -0,0 +1,308 @@
+/*
+ * Copyright 1993-2013 NVIDIA Corporation. All rights reserved.
+ *
+ * Please refer to the NVIDIA end user license agreement (EULA) associated
+ * with this source code for terms and conditions that govern your use of
+ * this software. Any use, reproduction, disclosure, or distribution of
+ * this software and related documentation outside the terms of the EULA
+ * is strictly prohibited.
+ *
+ */
+
+/*
+ ParamListGL
+ - class derived from ParamList to do simple OpenGL rendering of a parameter list
+ sgg 8/2001
+*/
+
+#ifndef PARAMGL_H
+#define PARAMGL_H
+
+#if defined(__APPLE__) || defined(MACOSX)
+#include <GLUT/glut.h>
+#else
+#include <GL/freeglut.h>
+#endif
+
+#include <string.h>
+#include <param.h>
+
+inline void beginWinCoords(void)
+{
+ glMatrixMode(GL_MODELVIEW);
+ glPushMatrix();
+ glLoadIdentity();
+ glTranslatef(0.0, (GLfloat)(glutGet(GLUT_WINDOW_HEIGHT) - 1.0), 0.0);
+ glScalef(1.0, -1.0, 1.0);
+
+ glMatrixMode(GL_PROJECTION);
+ glPushMatrix();
+ glLoadIdentity();
+ glOrtho(0, glutGet(GLUT_WINDOW_WIDTH), 0, glutGet(GLUT_WINDOW_HEIGHT), -1, 1);
+
+ glMatrixMode(GL_MODELVIEW);
+}
+
+inline void endWinCoords(void)
+{
+ glMatrixMode(GL_PROJECTION);
+ glPopMatrix();
+
+ glMatrixMode(GL_MODELVIEW);
+ glPopMatrix();
+}
+
+inline void glPrint(int x, int y, const char *s, void *font)
+{
+ glRasterPos2f((GLfloat)x, (GLfloat)y);
+ int len = (int) strlen(s);
+
+ for (int i = 0; i < len; i++)
+ {
+ glutBitmapCharacter(font, s[i]);
+ }
+}
+
+inline void glPrintShadowed(int x, int y, const char *s, void *font, float *color)
+{
+ glColor3f(0.0, 0.0, 0.0);
+ glPrint(x-1, y-1, s, font);
+
+ glColor3fv((GLfloat *) color);
+ glPrint(x, y, s, font);
+}
+
+class ParamListGL : public ParamList
+{
+ public:
+ ParamListGL(const char *name = "") :
+ ParamList(name),
+ m_active(true),
+ m_text_color_selected(1.0, 1.0, 1.0),
+ m_text_color_unselected(0.75, 0.75, 0.75),
+ m_text_color_shadow(0.0, 0.0, 0.0),
+ m_bar_color_outer(0.25, 0.25, 0.25),
+ m_bar_color_inner(1.0, 1.0, 1.0)
+ {
+ m_font = (void *) GLUT_BITMAP_9_BY_15; // GLUT_BITMAP_8_BY_13;
+ m_font_h = 15;
+ m_bar_x = 260;
+ m_bar_w = 250;
+ m_bar_h = 10;
+ m_bar_offset = 5;
+ m_text_x = 5;
+ m_separation = 15;
+ m_value_x = 200;
+ m_start_x = 0;
+ m_start_y = 0;
+ }
+
+ void Render(int x, int y, bool shadow = false)
+ {
+ beginWinCoords();
+
+ m_start_x = x;
+ m_start_y = y;
+
+ for (std::vector<ParamBase *>::const_iterator p = m_params.begin(); p != m_params.end(); ++p)
+ {
+ if ((*p)->IsList())
+ {
+ ParamListGL *list = (ParamListGL *)(*p);
+ list->Render(x+10, y);
+ y += m_separation*list->GetSize();
+ }
+ else
+ {
+ if (p == m_current)
+ {
+ glColor3fv(&m_text_color_selected.r);
+ }
+ else
+ {
+ glColor3fv(&m_text_color_unselected.r);
+ }
+
+ if (shadow)
+ {
+ glPrintShadowed(x + m_text_x, y + m_font_h, (*p)->GetName().c_str(), m_font, (p == m_current) ? &m_text_color_selected.r : &m_text_color_unselected.r);
+ glPrintShadowed(x + m_value_x, y + m_font_h, (*p)->GetValueString().c_str(), m_font, (p == m_current) ? &m_text_color_selected.r : &m_text_color_unselected.r);
+ }
+ else
+ {
+ glPrint(x + m_text_x, y + m_font_h, (*p)->GetName().c_str(), m_font);
+ glPrint(x + m_value_x, y + m_font_h, (*p)->GetValueString().c_str(), m_font);
+ }
+
+ glColor3fv((GLfloat *) &m_bar_color_outer.r);
+ glBegin(GL_LINE_LOOP);
+ glVertex2f((GLfloat)(x + m_bar_x) , (GLfloat)(y + m_bar_offset));
+ glVertex2f((GLfloat)(x + m_bar_x + m_bar_w), (GLfloat)(y + m_bar_offset));
+ glVertex2f((GLfloat)(x + m_bar_x + m_bar_w), (GLfloat)(y + m_bar_offset + m_bar_h));
+ glVertex2f((GLfloat)(x + m_bar_x) , (GLfloat)(y + m_bar_offset + m_bar_h));
+ glEnd();
+
+ glColor3fv((GLfloat *) &m_bar_color_inner.r);
+ glRectf((GLfloat)(x + m_bar_x), (GLfloat)(y + m_bar_offset + m_bar_h), (GLfloat)(x + m_bar_x + ((m_bar_w-1)*(*p)->GetPercentage())), (GLfloat)(y + m_bar_offset + 1));
+
+ y += m_separation;
+ }
+ }
+
+ endWinCoords();
+ }
+
+ bool Mouse(int x, int y, int button=GLUT_LEFT_BUTTON, int state=GLUT_DOWN)
+ {
+ if ((y < m_start_y) || (y > (int)(m_start_y + (m_separation * m_params.size()) - 1)))
+ {
+ m_active = false;
+ return false;
+ }
+
+ m_active = true;
+
+ int i = (y - m_start_y) / m_separation;
+
+ if ((button==GLUT_LEFT_BUTTON) && (state==GLUT_DOWN))
+ {
+#if defined(__GNUC__) && (__GNUC__ < 3)
+ m_current = &m_params[i];
+#else
+
+ // MJH: workaround since the version of vector::at used here is non-standard
+ for (m_current = m_params.begin(); m_current != m_params.end() && i > 0; m_current++, i--) ;
+
+ //m_current = (std::vector<ParamBase *>::const_iterator)&m_params.at(i);
+#endif
+
+ if ((x > m_bar_x) && (x < m_bar_x + m_bar_w))
+ {
+ Motion(x, y);
+ }
+ }
+
+ return true;
+ }
+
+ bool Motion(int x, int y)
+ {
+ if ((y < m_start_y) || (y > m_start_y + (m_separation * (int)m_params.size()) - 1))
+ {
+ return false;
+ }
+
+ if (x < m_bar_x)
+ {
+ (*m_current)->SetPercentage(0.0);
+ return true;
+ }
+
+ if (x > m_bar_x + m_bar_w)
+ {
+ (*m_current)->SetPercentage(1.0);
+ return true;
+ }
+
+ (*m_current)->SetPercentage((x-m_bar_x) / (float) m_bar_w);
+ return true;
+ }
+
+ void Special(int key, int x, int y)
+ {
+ if (!m_active)
+ return;
+
+ switch (key)
+ {
+ case GLUT_KEY_DOWN:
+ Increment();
+ break;
+
+ case GLUT_KEY_UP:
+ Decrement();
+ break;
+
+ case GLUT_KEY_RIGHT:
+ GetCurrent()->Increment();
+ break;
+
+ case GLUT_KEY_LEFT:
+ GetCurrent()->Decrement();
+ break;
+
+ case GLUT_KEY_HOME:
+ GetCurrent()->Reset();
+ break;
+
+ case GLUT_KEY_END:
+ GetCurrent()->SetPercentage(1.0);
+ break;
+ }
+
+ glutPostRedisplay();
+ }
+
+ void SetFont(void *font, int height)
+ {
+ m_font = font;
+ m_font_h = height;
+ }
+
+ void SetSelectedColor(float r, float g, float b)
+ {
+ m_text_color_selected = Color(r, g, b);
+ }
+ void SetUnSelectedColor(float r, float g, float b)
+ {
+ m_text_color_unselected = Color(r, g, b);
+ }
+ void SetBarColorInner(float r, float g, float b)
+ {
+ m_bar_color_inner = Color(r, g, b);
+ }
+ void SetBarColorOuter(float r, float g, float b)
+ {
+ m_bar_color_outer = Color(r, g, b);
+ }
+
+ void SetActive(bool b)
+ {
+ m_active = b;
+ }
+
+ private:
+ void *m_font;
+ int m_font_h; // font height
+
+ int m_bar_x; // bar start x position
+ int m_bar_w; // bar width
+ int m_bar_h; // bar height
+ int m_text_x; // text start x position
+ int m_separation; // bar separation in y
+ int m_value_x; // value text x position
+ int m_bar_offset; // bar offset in y
+
+ int m_start_x, m_start_y;
+
+ bool m_active;
+
+ struct Color
+ {
+ Color(float _r, float _g, float _b)
+ {
+ r = _r;
+ g = _g;
+ b = _b;
+ }
+ float r, g, b;
+ };
+
+ Color m_text_color_selected;
+ Color m_text_color_unselected;
+ Color m_text_color_shadow;
+ Color m_bar_color_outer;
+ Color m_bar_color_inner;
+};
+
+#endif