gpt4 book ai didi

android ndk - ANativeWindow_lock 不一致?

转载 作者:太空宇宙 更新时间:2023-11-04 04:53:25 24 4
gpt4 key购买 nike

我正在为 android 2.3 编写代码。
我写了这个程序;它从 (0,0) 到 (99,99) 绘制了一条 100 像素长的白色对角线。

有一个错误:代码只有在第一次执行时才能正确绘制屏幕。
每次之后,它都会绘制两条较短的对角线;一条黄绿色线和一条蓝线。
每行显示的长度大约是正确长度的一半。
黄绿色线似乎从 (0,0) 开始,但蓝色线似乎从 (200,0) 左右开始

我注意到每次代码执行时,ANativeWindow_Buffer.format 可能不同,不知道是否相关。

有人知道发生了什么事吗?

感谢帮助

#include <android/log.h>
#include <android_native_app_glue.h>

ANativeWindow_Buffer buffer;

void Out( int x, int y ) {

uint16_t * pPixel = buffer.bits;

/* Compute correct x,y */
pPixel += ( x + ( y * buffer.stride ) );

/* put a white pixel there */
*pPixel = -1;

}


void drawscreen( struct android_app * app ) {

unsigned u;

for ( u = 0; u < 100; u++ ) {

Out( u, u );

}

}


static void android_handle_cmd( struct android_app * app, int32_t cmd ) {

switch ( cmd ) {

case APP_CMD_INIT_WINDOW:

// The window is being shown.
if ( NULL == app->window ) {

return;

}

if ( 0 > ANativeWindow_lock( app->window, &buffer, NULL ) ) {

return;

}

drawscreen( app );

ANativeWindow_unlockAndPost( app->window );
break;

}

}


void android_main( struct android_app * app ) {

app_dummy();

app->onAppCmd = android_handle_cmd;

for ( ;; ) {

int events;

int iRet;

struct android_poll_source * source;

iRet = ALooper_pollAll( -1, NULL, &events, (void**)&source );

if ( NULL != source ) {

source->process( app, source );
continue;

}

}

}

最佳答案

也许试试:

  int32_t w = ANativeWindow_getWidth(app->window);
int32_t h = ANativeWindow_getHeight(app->window);
ANativeWindow_setBuffersGeometry(app->window, w, h, WINDOW_FORMAT_RGB_565);

调用drawscreen之前

关于android ndk - ANativeWindow_lock 不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12412594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com