Skip to content

Commit

Permalink
[demo] Refactor glstate code
Browse files Browse the repository at this point in the history
  • Loading branch information
behdad committed Mar 24, 2012
1 parent cca0090 commit 5d768bf
Show file tree
Hide file tree
Showing 6 changed files with 172 additions and 72 deletions.
2 changes: 2 additions & 0 deletions demo/Makefile.am
Expand Up @@ -37,6 +37,8 @@ glyphy_demo_SOURCES = \
demo-common.h \
demo-font.h \
demo-font.cc \
demo-glstate.h \
demo-glstate.cc \
demo-shader.h \
demo-shader.cc \
demo-view.h \
Expand Down
87 changes: 87 additions & 0 deletions demo/demo-glstate.cc
@@ -0,0 +1,87 @@
/*
* Copyright 2012 Google, Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Google Author(s): Behdad Esfahbod, Maysum Panju, Wojciech Baranowski
*/

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include "demo-glstate.h"

demo_glstate_t *
demo_glstate_create (void)
{
demo_glstate_t *st = (demo_glstate_t *) calloc (1, sizeof (demo_glstate_t));
st->refcount = 1;

st->program = demo_shader_create_program ();
st->atlas = demo_atlas_create (2048, 1024, 64, 8);

st->u_debug = false;
st->u_smoothfunc = 1;
st->u_contrast = 1.0;
st->u_gamma_adjust = 1.0;

return st;
}

demo_glstate_t *
demo_glstate_reference (demo_glstate_t *st)
{
if (st) st->refcount++;
return st;
}

void
demo_glstate_destroy (demo_glstate_t *st)
{
if (!st || --st->refcount)
return;

demo_atlas_destroy (st->atlas);
glDeleteProgram (st->program);

free (st);
}


static void
set_uniform (GLuint program, const char *name, double *p, double value)
{
*p = value;
glUniform1f (glGetUniformLocation (program, name), value);
printf ("Setting %s to %g\n", name, value);
}

#define SET_UNIFORM(name, value) set_uniform (st->program, #name, &st->name, value)

void
demo_glstate_setup (demo_glstate_t *st)
{
glUseProgram (st->program);
demo_atlas_set_uniforms (st->atlas);
SET_UNIFORM (u_debug, st->u_debug);
SET_UNIFORM (u_smoothfunc, st->u_smoothfunc);
SET_UNIFORM (u_contrast, st->u_contrast);
SET_UNIFORM (u_gamma_adjust, st->u_gamma_adjust);
}

demo_atlas_t *
demo_glstate_get_atlas (demo_glstate_t *st)
{
return st->atlas;
}
59 changes: 59 additions & 0 deletions demo/demo-glstate.h
@@ -0,0 +1,59 @@
/*
* Copyright 2012 Google, Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Google Author(s): Behdad Esfahbod
*/

#ifndef DEMO_GLSTATE_H
#define DEMO_GLSTATE_H

#include "demo-common.h"
#include "demo-buffer.h"

#include "demo-atlas.h"
#include "demo-shader.h"

typedef struct {
unsigned int refcount;

GLuint program;
demo_atlas_t *atlas;

/* Uniforms */
double u_debug;
double u_smoothfunc;
double u_contrast;
double u_gamma_adjust;

} demo_glstate_t;

demo_glstate_t *
demo_glstate_create (void);

demo_glstate_t *
demo_glstate_reference (demo_glstate_t *st);

void
demo_glstate_destroy (demo_glstate_t *st);


void
demo_glstate_setup (demo_glstate_t *st);

demo_atlas_t *
demo_glstate_get_atlas (demo_glstate_t *st);


#endif /* DEMO_GLSTATE_H */
29 changes: 18 additions & 11 deletions demo/demo-view.cc
Expand Up @@ -32,7 +32,7 @@ extern "C" {
struct demo_view_t {
unsigned int refcount;

demo_state_t *st;
demo_glstate_t *st;

/* Output */
GLint vsync;
Expand Down Expand Up @@ -65,7 +65,7 @@ struct demo_view_t {
demo_view_t *static_vu;

demo_view_t *
demo_view_create (demo_state_t *st)
demo_view_create (demo_glstate_t *st)
{
demo_view_t *vu = (demo_view_t *) calloc (1, sizeof (demo_view_t));
vu->refcount = 1;
Expand Down Expand Up @@ -111,18 +111,27 @@ demo_view_reset (demo_view_t *vu)
axis_to_quat (a, ANIMATION_SPEED, vu->dquat);
}


static void
set_uniform (GLuint program, const char *name, double *p, double value)
{
*p = value;
glUniform1f (glGetUniformLocation (program, name), value);
printf ("Setting %s to %g\n", name, value);
}

#define SET_UNIFORM(name, value) set_uniform (vu->st->program, #name, &vu->st->name, value)

static void
demo_view_scale_gamma_adjust (demo_view_t *vu, double factor)
{
demo_state_t *st = vu->st;
SET_UNIFORM (u_gamma_adjust, clamp (st->u_gamma_adjust * factor, .1, 10.));
SET_UNIFORM (u_gamma_adjust, clamp (vu->st->u_gamma_adjust * factor, .1, 10.));
}

static void
demo_view_scale_contrast (demo_view_t *vu, double factor)
{
demo_state_t *st = vu->st;
SET_UNIFORM (u_contrast, clamp (st->u_contrast * factor, .1, 10.));
SET_UNIFORM (u_contrast, clamp (vu->st->u_contrast * factor, .1, 10.));
}

static void
Expand Down Expand Up @@ -291,15 +300,13 @@ demo_view_toggle_srgb (demo_view_t *vu)
static void
demo_view_toggle_debug (demo_view_t *vu)
{
demo_state_t *st = vu->st;
SET_UNIFORM (u_debug, 1 - st->u_debug);
SET_UNIFORM (u_debug, 1 - vu->st->u_debug);
}

static void
demo_view_next_smoothfunc (demo_view_t *vu)
{
demo_state_t *st = vu->st;
SET_UNIFORM (u_smoothfunc, ((int) st->u_smoothfunc + 1) % 3);
SET_UNIFORM (u_smoothfunc, ((int) vu->st->u_smoothfunc + 1) % 3);
}


Expand Down Expand Up @@ -579,5 +586,5 @@ demo_view_setup (demo_view_t *vu)
demo_view_toggle_vsync (vu);
if (!vu->srgb)
demo_view_toggle_srgb (vu);
demo_state_setup (vu->st);
demo_glstate_setup (vu->st);
}
59 changes: 2 additions & 57 deletions demo/demo-view.h
Expand Up @@ -21,67 +21,12 @@

#include "demo-common.h"
#include "demo-buffer.h"

#include "demo-atlas.h"
#include "demo-shader.h"

typedef struct {
GLuint program;
demo_atlas_t *atlas;

/* Uniforms */
double u_debug;
double u_smoothfunc;
double u_contrast;
double u_gamma_adjust;

} demo_state_t;

static void
demo_state_init (demo_state_t *st)
{
st->program = demo_shader_create_program ();
st->atlas = demo_atlas_create (2048, 1024, 64, 8);

st->u_debug = false;
st->u_smoothfunc = 1;
st->u_contrast = 1.0;
st->u_gamma_adjust = 1.0;
}

static void
demo_state_fini (demo_state_t *st)
{
demo_atlas_destroy (st->atlas);
glDeleteProgram (st->program);
}

static void
set_uniform (GLuint program, const char *name, double *p, double value)
{
*p = value;
glUniform1f (glGetUniformLocation (program, name), value);
printf ("Setting %s to %g\n", name, value);
}
#define SET_UNIFORM(name, value) set_uniform (st->program, #name, &st->name, value)

static void
demo_state_setup (demo_state_t *st)
{
glUseProgram (st->program);
demo_atlas_set_uniforms (st->atlas);
SET_UNIFORM (u_debug, st->u_debug);
SET_UNIFORM (u_smoothfunc, st->u_smoothfunc);
SET_UNIFORM (u_contrast, st->u_contrast);
SET_UNIFORM (u_gamma_adjust, st->u_gamma_adjust);
}


#include "demo-glstate.h"

typedef struct demo_view_t demo_view_t;

demo_view_t *
demo_view_create (demo_state_t *st);
demo_view_create (demo_glstate_t *st);

demo_view_t *
demo_view_reference (demo_view_t *vu);
Expand Down
8 changes: 4 additions & 4 deletions demo/glyphy-demo.cc
Expand Up @@ -24,8 +24,8 @@
#include "demo-font.h"
#include "demo-view.h"

static demo_glstate_t *st;
static demo_view_t *vu;
static demo_state_t st[1];
static demo_buffer_t *buffer;

#define WINDOW_W 700
Expand Down Expand Up @@ -99,7 +99,7 @@ main (int argc, char** argv)
font_path = argv[1];
text = argv[2];

demo_state_init (st);
st = demo_glstate_create ();
vu = demo_view_create (st);

demo_view_print_help (vu);
Expand All @@ -111,7 +111,7 @@ main (int argc, char** argv)
if (!ft_face)
die ("Failed to open font file");

demo_font_t *font = demo_font_create (ft_face, st->atlas);
demo_font_t *font = demo_font_create (ft_face, demo_glstate_get_atlas (st));

glyphy_point_t top_left = {0, 0};
buffer = demo_buffer_create ();
Expand All @@ -130,7 +130,7 @@ main (int argc, char** argv)
FT_Done_FreeType (ft_library);

demo_view_destroy (vu);
demo_state_fini (st);
demo_glstate_destroy (st);

glutDestroyWindow (window);

Expand Down

0 comments on commit 5d768bf

Please sign in to comment.