コード例 #1
0
ファイル: ogl_draw.c プロジェクト: allefant/allegro
static void ogl_set_projection(ALLEGRO_DISPLAY *d)
{
    if (d->flags & ALLEGRO_USE_PROGRAMMABLE_PIPELINE) {
#ifndef ALLEGRO_CFG_NO_GLES2
        GLuint program_object = d->ogl_extras->program_object;
        GLint handle;

        // FIXME: In al_create_display we have no shader yet
        if (program_object == 0)
            return;

        handle = glGetUniformLocation(program_object, "projview_matrix");
        if (handle >= 0) {
            ALLEGRO_TRANSFORM t;
            al_copy_transform(&t, &d->view_transform);
            al_compose_transform(&t, &d->proj_transform);
            glUniformMatrix4fv(handle, 1, false, (float *)t.m);
        }
#endif
    }
    else {
        glMatrixMode(GL_PROJECTION);
        glLoadMatrixf((float *)d->proj_transform.m);
        glMatrixMode(GL_MODELVIEW);
    }
}
コード例 #2
0
ファイル: ogl_draw.c プロジェクト: tsteinholz/SR-Gaming
static void ogl_update_transformation(ALLEGRO_DISPLAY* disp,
   ALLEGRO_BITMAP *target)
{
   if (disp->flags & ALLEGRO_PROGRAMMABLE_PIPELINE) {
#ifdef ALLEGRO_CFG_SHADER_GLSL
      GLint loc = disp->ogl_extras->varlocs.projview_matrix_loc;
      ALLEGRO_TRANSFORM projview;
      al_copy_transform(&projview, &target->transform);
      al_compose_transform(&projview, &target->proj_transform);
      al_copy_transform(&disp->projview_transform, &projview);

      if (disp->ogl_extras->program_object > 0 && loc >= 0) {
         _al_glsl_set_projview_matrix(loc, &disp->projview_transform);
      }
#endif
   } else {
      glMatrixMode(GL_PROJECTION);
      glLoadMatrixf((float *)target->proj_transform.m);
      glMatrixMode(GL_MODELVIEW);
      glLoadMatrixf((float *)target->transform.m);
   }

   if (target->parent) {
      ALLEGRO_BITMAP_EXTRA_OPENGL *ogl_extra = target->parent->extra;
      /* glViewport requires the bottom-left coordinate of the corner. */
      glViewport(target->xofs, ogl_extra->true_h - (target->yofs + target->h), target->w, target->h);
   } else {
      glViewport(0, 0, target->w, target->h);
   }
}
コード例 #3
0
ファイル: bitmap_draw.c プロジェクト: BorisCarvajal/allegro5
static void _draw_tinted_rotated_scaled_bitmap_region(ALLEGRO_BITMAP *bitmap,
   ALLEGRO_COLOR tint, float cx, float cy, float angle,
   float xscale, float yscale,
   float sx, float sy, float sw, float sh, float dx, float dy,
   int flags)
{
   ALLEGRO_TRANSFORM backup;
   ALLEGRO_TRANSFORM t;
   ALLEGRO_BITMAP *parent = bitmap;
   float const orig_sw = sw;
   float const orig_sh = sh;
   ASSERT(bitmap);

   al_copy_transform(&backup, al_get_current_transform());
   al_identity_transform(&t);
   
   if (bitmap->parent) {
      parent = bitmap->parent;
      sx += bitmap->xofs;
      sy += bitmap->yofs;
   }
   
   if (sx < 0) {
      sw += sx;
      al_translate_transform(&t, -sx, 0);
      sx = 0;
   }
   if (sy < 0) {
      sh += sy;
      al_translate_transform(&t, 0, -sy);
      sy = 0;
   }
   if (sx + sw > parent->w)
      sw = parent->w - sx;
   if (sy + sh > parent->h)
      sh = parent->h - sy;

   if (flags & ALLEGRO_FLIP_HORIZONTAL) {
      al_scale_transform(&t, -1, 1);
      al_translate_transform(&t, orig_sw, 0);
      flags &= ~ALLEGRO_FLIP_HORIZONTAL;
   }

   if (flags & ALLEGRO_FLIP_VERTICAL) {
      al_scale_transform(&t, 1, -1);
      al_translate_transform(&t, 0, orig_sh);
      flags &= ~ALLEGRO_FLIP_VERTICAL;
   }

   al_translate_transform(&t, -cx, -cy);
   al_scale_transform(&t, xscale, yscale);
   al_rotate_transform(&t, angle);
   al_translate_transform(&t, dx, dy);
   al_compose_transform(&t, &backup);

   al_use_transform(&t);
   _bitmap_drawer(parent, tint, sx, sy, sw, sh, flags);
   al_use_transform(&backup);
}
コード例 #4
0
ファイル: Renderer.cpp プロジェクト: Tomasu/mctools
void Renderer::draw()
{
	//int dw = al_get_display_width(dpy_);
   //int dh = al_get_display_height(dpy_);

	ALLEGRO_TRANSFORM trans;
	al_identity_transform(&trans);

	al_compose_transform(&trans, &camera_transform_);
	al_rotate_transform_3d(&trans, 1.0, 0.0, 0.0, rx_look);

	setupProjection(&trans);
	al_identity_transform(&trans);


	al_use_transform(&trans);

	getWorldPos(camera_pos_);

	al_copy_transform(&cur3d_transform_, al_get_current_transform());

	glEnable(GL_DEPTH_TEST);
	// Accept fragment if it closer to the camera than the former one
	glDepthFunc(GL_LEQUAL);
	glEnable(GL_CULL_FACE);
	glFrontFace(GL_CCW);
	glEnable(GL_ALPHA_TEST);

	if(!setShader(SHADER_DEFAULT))
	{
		NBT_Debug("failed to set default shader");
	}

	glBindVertexArray(vao_);

	resManager_->setAtlasUniforms();

	for(auto &it: chunkData_)
	{
		ChunkData *cd = it.second;

		ALLEGRO_TRANSFORM ctrans;
		al_identity_transform(&ctrans);
		al_translate_transform_3d(&ctrans, cd->x()*15.0, 0.0, cd->z()*15.0);
		al_use_transform(&ctrans);

		cd->draw(&ctrans);
	}

	glBindVertexArray(0);

	glDisable(GL_DEPTH_TEST);
	glDisable(GL_CULL_FACE);

	//drawSelection();

	resManager_->unsetAtlasUniforms();
}
コード例 #5
0
ファイル: memblit.c プロジェクト: MrStamina/project
static void _al_draw_transformed_scaled_bitmap_memory(
    ALLEGRO_BITMAP *src, ALLEGRO_COLOR tint,
    int sx, int sy, int sw, int sh, int dx, int dy, int dw, int dh, int flags)
{
    ALLEGRO_TRANSFORM local_trans;

    al_identity_transform(&local_trans);
    al_translate_transform(&local_trans, dx, dy);
    al_compose_transform(&local_trans, al_get_current_transform());

    _al_draw_transformed_bitmap_memory(src, tint, sx, sy, sw, sh, dw, dh,
                                       &local_trans, flags);
}
コード例 #6
0
ファイル: ogl_draw.c プロジェクト: allefant/allegro
static void ogl_update_transformation(ALLEGRO_DISPLAY* disp,
                                      ALLEGRO_BITMAP *target)
{
    ALLEGRO_TRANSFORM tmp;

    al_copy_transform(&tmp, &target->transform);

    if (target->parent) {
        /* Sub-bitmaps have an additional offset. */
        al_translate_transform(&tmp, target->xofs, target->yofs);
    }

    if (disp->flags & ALLEGRO_USE_PROGRAMMABLE_PIPELINE) {
#ifndef ALLEGRO_CFG_NO_GLES2
        GLuint program_object = disp->ogl_extras->program_object;
        GLint handle;

        // FIXME: In al_create_display we have no shader yet
        if (program_object == 0)
            return;

        al_copy_transform(&disp->view_transform, &tmp);

        al_compose_transform(&tmp, &disp->proj_transform);

        handle = glGetUniformLocation(program_object, "projview_matrix");
        if (handle >= 0) {
            glUniformMatrix4fv(handle, 1, GL_FALSE, (float *)tmp.m);
        }
#endif
    }
    else {
        glMatrixMode(GL_MODELVIEW);
        glLoadMatrixf((float *)tmp.m);
    }
}
コード例 #7
0
ファイル: transform.c プロジェクト: beoran/ralleg5
VALUE rbal_compose_transform(VALUE r_, VALUE rtrans, VALUE rother) {
  ALLEGRO_TRANSFORM * trans = rbal_transform_unwrap(rtrans);
  ALLEGRO_TRANSFORM * other = rbal_transform_unwrap(rother);
  al_compose_transform(trans, other);
  return rtrans;
}