some basic zoom/dpi stuff, to be improved

This commit is contained in:
Henrik Rydgard 2012-07-06 22:32:32 +02:00
parent 26da3ea198
commit aaa15177e0
4 changed files with 98 additions and 89 deletions

View file

@ -72,7 +72,6 @@ void LaunchEmail(const char *email_address)
// Remember that all of these need initialization on init! The process
// may be reused when restarting the game. Globals are DANGEROUS.
int xres, yres;
// Used for touch. (TODO)
float xscale = 1;
@ -94,19 +93,19 @@ extern "C" void Java_com_turboviking_libnative_NativeApp_init
(JNIEnv *env, jclass, jint xxres, jint yyres, jstring apkpath,
jstring dataDir, jstring externalDir, jstring jinstallID) {
jniEnvUI = env;
xres = xxres;
yres = yyres;
g_xres = xres;
g_yres = yres;
pixel_xres = xxres;
pixel_yres = yyres;
g_xres = xxres;
g_yres = yyres;
if (g_xres < g_yres)
{
// Portrait - let's force the imaginary resolution we want
g_xres = coord_xres;
g_yres = coord_yres;
g_xres = pixel_xres;
g_yres = pixel_yres;
}
xscale = (float)coord_xres / xres;
yscale = (float)coord_yres / yres;
xscale = (float)g_xres / pixel_xres;
yscale = (float)g_yres / pixel_yres;
memset(&input_state, 0, sizeof(input_state));
renderer_inited = false;
first_lost = true;

View file

@ -30,9 +30,9 @@
void SystemToast(const char *text) {
#ifdef _WIN32
MessageBox(0, text, "Toast!", MB_ICONINFORMATION);
MessageBox(0, text, "Toast!", MB_ICONINFORMATION);
#else
puts(text);
puts(text);
#endif
}
@ -76,69 +76,79 @@ void LaunchEmail(const char *email_address)
const int buttonMappings[12] = {
SDLK_x, //A
SDLK_s, //B
SDLK_z, //X
SDLK_a, //Y
SDLK_x, //A
SDLK_s, //B
SDLK_z, //X
SDLK_a, //Y
SDLK_w, //LBUMPER
SDLK_q, //RBUMPER
SDLK_1, //START
SDLK_2, //BACK
SDLK_UP, //UP
SDLK_UP, //UP
SDLK_DOWN, //DOWN
SDLK_LEFT, //LEFT
SDLK_RIGHT, //RIGHT
SDLK_LEFT, //LEFT
SDLK_RIGHT, //RIGHT
};
void SimulateGamepad(const uint8 *keys, InputState *input) {
input->pad_buttons = 0;
input->pad_lstick_x = 0;
input->pad_lstick_y = 0;
input->pad_rstick_x = 0;
input->pad_rstick_y = 0;
input->pad_buttons = 0;
input->pad_lstick_x = 0;
input->pad_lstick_y = 0;
input->pad_rstick_x = 0;
input->pad_rstick_y = 0;
for (int b = 0; b < 12; b++) {
if (keys[buttonMappings[b]])
input->pad_buttons |= (1<<b);
}
if (keys['I']) input->pad_lstick_y=32000;
if (keys['I']) input->pad_lstick_y=32000;
else if (keys['K']) input->pad_lstick_y=-32000;
if (keys['J']) input->pad_lstick_x=-32000;
if (keys['J']) input->pad_lstick_x=-32000;
else if (keys['L']) input->pad_lstick_x=32000;
if (keys['8']) input->pad_rstick_y=32000;
if (keys['8']) input->pad_rstick_y=32000;
else if (keys['2']) input->pad_rstick_y=-32000;
if (keys['4']) input->pad_rstick_x=-32000;
if (keys['4']) input->pad_rstick_x=-32000;
else if (keys['6']) input->pad_rstick_x=32000;
}
extern void mixaudio(void *userdata, Uint8 *stream, int len) {
NativeMix((short *)stream, len / 4);
NativeMix((short *)stream, len / 4);
}
#ifdef _WIN32
#undef main
#endif
int main(int argc, char *argv[]) {
/* // Xoom resolution. Other common tablet resolutions: 1024x600 , 1366x768
g_xres = 1280;
g_yres = 800;
*/
/* // Xoom resolution. Other common tablet resolutions: 1024x600 , 1366x768
g_xres = 1280;
g_yres = 800;
*/
std::string app_name;
std::string app_name_nice;
bool landscape;
NativeGetAppInfo(&app_name, &app_name_nice, &landscape);
float zoom = 0.7f;
const char *zoomenv = getenv("ZOOM");
if (zoomenv) {
zoom = atof(zoomenv);
}
if (landscape) {
g_xres = 800;
g_yres = 480;
pixel_xres = 800 * zoom;
pixel_yres = 480 * zoom;
} else {
#ifdef _WIN32
g_xres = 1580;
g_yres = 1000;
#endif
pixel_xres = 1580 * zoom;
pixel_yres = 1000 * zoom;
}
net::Init();
float density = 1.0f;
g_xres = (float)pixel_xres * density / zoom;
g_yres = (float)pixel_yres * density / zoom;
printf("Pixels: %i x %i\n", pixel_xres, pixel_yres);
printf("Virtual pixels: %i x %i\n", g_xres, g_yres);
net::Init();
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
fprintf(stderr, "Unable to initialize SDL: %s\n", SDL_GetError());
@ -155,7 +165,7 @@ int main(int argc, char *argv[]) {
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1);
if (SDL_SetVideoMode(g_xres, g_yres, 0, SDL_OPENGL) == NULL) {
if (SDL_SetVideoMode(pixel_xres, pixel_yres, 0, SDL_OPENGL) == NULL) {
fprintf(stderr, "SDL SetVideoMode failed: Unable to create OpenGL screen: %s\n", SDL_GetError());
SDL_Quit();
return(2);
@ -193,32 +203,32 @@ int main(int argc, char *argv[]) {
#endif
NativeInit(argc, (const char **)argv, path, "BADCOFFEE");
NativeInitGraphics();
NativeInitGraphics();
SDL_AudioSpec fmt;
fmt.freq = 44100;
fmt.format = AUDIO_S16;
fmt.channels = 2;
fmt.samples = 1024;
fmt.callback = &mixaudio;
fmt.userdata = (void *)0;
SDL_AudioSpec fmt;
fmt.freq = 44100;
fmt.format = AUDIO_S16;
fmt.channels = 2;
fmt.samples = 1024;
fmt.callback = &mixaudio;
fmt.userdata = (void *)0;
if (SDL_OpenAudio(&fmt, NULL) < 0) {
ELOG("Failed to open audio: %s", SDL_GetError());
return 1;
}
if (SDL_OpenAudio(&fmt, NULL) < 0) {
ELOG("Failed to open audio: %s", SDL_GetError());
return 1;
}
// Audio must be unpaused _after_ NativeInit()
SDL_PauseAudio(0);
// Audio must be unpaused _after_ NativeInit()
SDL_PauseAudio(0);
InputState input_state;
int framecount = 0;
InputState input_state;
int framecount = 0;
bool nextFrameMD = 0;
while (true) {
SDL_Event event;
input_state.accelerometer_valid = false;
input_state.mouse_valid = true;
input_state.accelerometer_valid = false;
input_state.mouse_valid = true;
int done = 0;
// input_state.mouse_down[1] = nextFrameMD;
@ -230,61 +240,57 @@ int main(int argc, char *argv[]) {
done = 1;
}
} else if (event.type == SDL_MOUSEMOTION) {
input_state.mouse_x[0] = event.motion.x;
input_state.mouse_y[0] = event.motion.y;
input_state.mouse_x[1] = event.motion.x + 150;
input_state.mouse_y[1] = event.motion.y;
input_state.mouse_x[0] = event.motion.x * density / zoom;
input_state.mouse_y[0] = event.motion.y * density / zoom;
} else if (event.type == SDL_MOUSEBUTTONDOWN) {
if (event.button.button == SDL_BUTTON_LEFT) {
///input_state.mouse_buttons_down = 1;
//input_state.mouse_buttons_down = 1;
input_state.mouse_down[0] = true;
nextFrameMD = true;
}
} else if (event.type == SDL_MOUSEBUTTONUP) {
if (event.button.button == SDL_BUTTON_LEFT) {
input_state.mouse_down[0] = false;
nextFrameMD = false;
//input_state.mouse_buttons_up = 1;
}
nextFrameMD = false;
//input_state.mouse_buttons_up = 1;
}
}
}
if (done)
break;
if (done) break;
input_state.mouse_last[0] = input_state.mouse_down[0];
input_state.mouse_last[0] = input_state.mouse_down[0];
uint8 *keys = (uint8 *)SDL_GetKeyState(NULL);
if (keys[SDLK_ESCAPE]) {
break;
}
if (keys[SDLK_ESCAPE])
break;
SimulateGamepad(keys, &input_state);
UpdateInputState(&input_state);
NativeUpdate(input_state);
NativeRender();
if (framecount % 60 == 0) {
// glsl_refresh(); // auto-reloads modified GLSL shaders once per second.
}
UpdateInputState(&input_state);
NativeUpdate(input_state);
NativeRender();
if (framecount % 60 == 0) {
// glsl_refresh(); // auto-reloads modified GLSL shaders once per second.
}
SDL_GL_SwapBuffers();
// Simple framerate limiting
// Simple framerate limiting
static float t=0;
while (time_now() < t+1.0f/60.0f) {
sleep_ms(0);
time_update();
time_update();
}
time_update();
time_update();
t = time_now();
framecount++;
framecount++;
}
// Faster exit, thanks to the OS. Remove this if you want to debug shutdown
exit(0);
// Faster exit, thanks to the OS. Remove this if you want to debug shutdown
exit(0);
NativeShutdownGraphics();
SDL_PauseAudio(1);
NativeShutdown();
SDL_CloseAudio();
NativeShutdownGraphics();
SDL_PauseAudio(1);
NativeShutdown();
SDL_CloseAudio();
SDL_Quit();
return 0;
}

View file

@ -2,3 +2,5 @@
int g_xres;
int g_yres;
int pixel_xres;
int pixel_yres;

View file

@ -5,3 +5,5 @@
extern int g_xres;
extern int g_yres;
extern int pixel_xres;
extern int pixel_yres;