blob: c8fe67d3b2d96d1efe7770019599048527c3f557 [file] [log] [blame]
/*
* Copyright 2010 Mario Zechner (contact@badlogicgames.com), Nathan Sweet (admin@esotericsoftware.com)
*
* 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.
*/
#ifndef __GDX2D__
#define __GDX2D__
#include <stdint.h>
#ifndef NOJNI
#include <jni.h>
#else
#define JNIEXPORT
#endif
#ifdef __cplusplus
extern "C" {
#endif
/**
* pixmap formats, components are laid out in memory
* in the order they appear in the constant name. E.g.
* GDX_FORMAT_RGB => pixmap[0] = r, pixmap[1] = g, pixmap[2] = b.
* Components are 8-bit each except for RGB565 and RGBA4444 which
* take up two bytes each. The order of bytes is machine dependent
* within a short the high order byte holds r and the first half of g
* the low order byte holds the lower half of g and b as well as a
* if the format is RGBA4444
*/
#define GDX2D_FORMAT_ALPHA 1
#define GDX2D_FORMAT_LUMINANCE_ALPHA 2
#define GDX2D_FORMAT_RGB888 3
#define GDX2D_FORMAT_RGBA8888 4
#define GDX2D_FORMAT_RGB565 5
#define GDX2D_FORMAT_RGBA4444 6
/**
* blending modes, to be extended
*/
#define GDX2D_BLEND_NONE 0
#define GDX2D_BLEND_SRC_OVER 1
/**
* scaling modes, to be extended
*/
#define GDX2D_SCALE_NEAREST 0
#define GDX2D_SCALE_BILINEAR 1
/**
* simple pixmap struct holding the pixel data,
* the dimensions and the format of the pixmap.
* the format is one of the GDX2D_FORMAT_XXX constants.
*/
typedef struct {
uint32_t width;
uint32_t height;
uint32_t format;
const unsigned char* pixels;
} gdx2d_pixmap;
JNIEXPORT gdx2d_pixmap* gdx2d_load (const unsigned char *buffer, uint32_t len);
JNIEXPORT gdx2d_pixmap* gdx2d_new (uint32_t width, uint32_t height, uint32_t format);
JNIEXPORT void gdx2d_free (const gdx2d_pixmap* pixmap);
JNIEXPORT void gdx2d_set_blend (uint32_t blend);
JNIEXPORT void gdx2d_set_scale (uint32_t scale);
JNIEXPORT const char* gdx2d_get_failure_reason(void);
JNIEXPORT void gdx2d_clear (const gdx2d_pixmap* pixmap, uint32_t col);
JNIEXPORT void gdx2d_set_pixel (const gdx2d_pixmap* pixmap, int32_t x, int32_t y, uint32_t col);
JNIEXPORT uint32_t gdx2d_get_pixel (const gdx2d_pixmap* pixmap, int32_t x, int32_t y);
JNIEXPORT void gdx2d_draw_line (const gdx2d_pixmap* pixmap, int32_t x, int32_t y, int32_t x2, int32_t y2, uint32_t col);
JNIEXPORT void gdx2d_draw_rect (const gdx2d_pixmap* pixmap, int32_t x, int32_t y, uint32_t width, uint32_t height, uint32_t col);
JNIEXPORT void gdx2d_draw_circle (const gdx2d_pixmap* pixmap, int32_t x, int32_t y, uint32_t radius, uint32_t col);
JNIEXPORT void gdx2d_fill_rect (const gdx2d_pixmap* pixmap, int32_t x, int32_t y, uint32_t width, uint32_t height, uint32_t col);
JNIEXPORT void gdx2d_fill_circle (const gdx2d_pixmap* pixmap, int32_t x, int32_t y, uint32_t radius, uint32_t col);
JNIEXPORT void gdx2d_fill_triangle(const gdx2d_pixmap* pixmap,int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t x3, int32_t y3, uint32_t col);
JNIEXPORT void gdx2d_draw_pixmap (const gdx2d_pixmap* src_pixmap,
const gdx2d_pixmap* dst_pixmap,
int32_t src_x, int32_t src_y, uint32_t src_width, uint32_t src_height,
int32_t dst_x, int32_t dst_y, uint32_t dst_width, uint32_t dst_height);
JNIEXPORT uint32_t gdx2d_bytes_per_pixel(uint32_t format);
#ifdef __cplusplus
}
#endif
#endif