小编Mar*_*n G的帖子

为Android编译SDL2

我想在Ubuntu上为Android编译SDL2.

我使用./configure配置SDL2 --host = arm-linux-androideabi

在使用ndk-build进行编译之后,我得到了一系列未定义的引用:

Compile thumb  : SDL2-2.0.0 <= SDL_androidkeyboard.c
Compile thumb  : SDL2-2.0.0 <= SDL_androidtouch.c
Compile thumb  : SDL2-2.0.0 <= SDL_androidvideo.c
Compile thumb  : SDL2-2.0.0 <= SDL_androidwindow.c
SharedLibrary  : libSDL2-2.0.0.so
/home/ire018/Applications/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /home/ire018/workspace/SDLActivity/obj/local/armeabi/objs/SDL2-2.0.0/src/audio/SDL_audio.o: in function bootstrap:SDL_audio.c(.data.rel.ro+0x0): error: undefined reference to 'PULSEAUDIO_bootstrap'
/home/ire018/Applications/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /home/ire018/workspace/SDLActivity/obj/local/armeabi/objs/SDL2-2.0.0/src/audio/SDL_audio.o: in function bootstrap:SDL_audio.c(.data.rel.ro+0x4): error: undefined reference to 'DISKAUD_bootstrap'
/home/ire018/Applications/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /home/ire018/workspace/SDLActivity/obj/local/armeabi/objs/SDL2-2.0.0/src/core/android/SDL_android.o: in function Java_org_libsdl_app_SDLActivity_onNativeResize:/home/ire018/workspace/SDLActivity/jni/SDL2-2.0.0/src/core/android/SDL_android.c:148: error: undefined reference to 'Android_SetScreenResolution'
/home/ire018/Applications/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /home/ire018/workspace/SDLActivity/obj/local/armeabi/objs/SDL2-2.0.0/src/core/android/SDL_android.o: in function Java_org_libsdl_app_SDLActivity_onNativeKeyDown:/home/ire018/workspace/SDLActivity/jni/SDL2-2.0.0/src/core/android/SDL_android.c:155: error: undefined reference to 'Android_OnKeyDown'
/home/ire018/Applications/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /home/ire018/workspace/SDLActivity/obj/local/armeabi/objs/SDL2-2.0.0/src/core/android/SDL_android.o: in function Java_org_libsdl_app_SDLActivity_onNativeKeyUp:/home/ire018/workspace/SDLActivity/jni/SDL2-2.0.0/src/core/android/SDL_android.c:162: error: undefined …
Run Code Online (Sandbox Code Playgroud)

linker android sdl compilation sdl-2

6
推荐指数
1
解决办法
3605
查看次数

使用 SDL_Renderer 绘制 2D 内容和使用 SDL_GLContext 绘制 OpenGL 内容

我已经学习 SDL 2D 编程一段时间了,现在我想创建一个结合使用 SDL 和 OpenGL 的程序。我是这样设置的:

SDL_Init(SDL_INIT_VIDEO);

window = SDL_CreateWindow("SDL and OpenGL", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL);

context = SDL_GL_CreateContext(window);
Run Code Online (Sandbox Code Playgroud)

该程序现在只是一个使用 OpenGl 显示的带有白线的黑色窗口。这是渲染的代码:

glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT);         

glBegin(GL_LINES);     
glVertex2d(1, 0);
glVertex2d(-1, 0);
glEnd();

SDL_GL_SwapWindow(window);  
Run Code Online (Sandbox Code Playgroud)

所以问题是,我想额外使用纯 SDL 和 SDL_Renderer 对象渲染纹理,就像我之前没有 OpenGL 所做的那样。我试过了,但没有用。甚至有可能做到这一点以及如何做到这一点?我所做的是创建一个 SDL_Renderer 然后在绘制 OpenGL 的东西之后这样做:

SDL_Rect fillRect;
fillRect.w = 50;
fillRect.h = 50;
fillRect.x = 0;
fillRect.y = 0; 

SDL_SetRenderDrawColor(renderer, 100, 200, 100, 0);
SDL_RenderFillRect(renderer, &fillRect);

SDL_RenderPresent(renderer);    
Run Code Online (Sandbox Code Playgroud)

但这不起作用。矩形未显示,尽管在几毫秒内它会略微出现。我觉得 OpenGL 渲染正在覆盖它。

c++ opengl rendering sdl sdl-2

6
推荐指数
1
解决办法
6528
查看次数

如何在git中为单个提交添加多个文件?

我对不同目录中的两个文件进行了更改,如何为单个提交添加两个文件。我可以做什么,添加第一个文件,然后将目录更改为第二个文件,然后添加第二个文件,最后执行提交。这行得通吗?

git git-commit

6
推荐指数
3
解决办法
3万
查看次数

kCGImageAlphaPremultipliedFirst和kCGImageAlphaFirst

你能解释一下kCGImageAlphaPremultipliedFirst和之间的区别kCGImageAlphaFirst吗?Premultiplied在实践中意味着什么?

pixel bitmap objective-c quartz-graphics cgcontext

5
推荐指数
1
解决办法
2403
查看次数

创建OpenGL 4.3上下文崩溃了GLX

我正在使用SDL2和C++ 11构建一个游戏引擎(就像个人项目一样,为了娱乐和练习),我想要做的一件事就是尝试让图形驱动程序使用最新支持的版本OpenGL,并根据版本改变引擎的图形部分的呈现方式.这样我可以使用OpenGL的最新功能,它们相关且有用,但也支持旧硬件.我能想到两种方法:

  1. 检测最新支持的OpenGL版本并使用它,但我想不出有任何方法可以做到这一点.是的,我试过谷歌.

  2. 使用试验和错误,从最新版本开始(4.3,但我的GTX 460仅支持最多4.2,即使我更新了驱动程序),如果失败(通过检查SDL返回NULL上下文检测到) ),我降低版本号,然后再试一次.

我使用的方法(#2)在创建4.3上下文后立即失败.我知道我的图形驱动程序现在只支持4.2,但我原以为GLX被设计为抛出一个错误,给出一个NULL上下文,并让你的程序继续运行,但它无法通过上下文的失败创建.我的假设是关于GLX如何表现错误?有没有办法在不创建上下文的情况下检测最新支持的版本?

因为我知道有些人喜欢看到演示错误的完整和最小的来源,这里是:

#include <SDL2/SDL.h>
#include <SDL2/SDL_opengl.h>
int main() {
    if( SDL_Init( SDL_INIT_EVERYTHING ) < 0 ) {
        return -1;
    }
    SDL_Window* window = SDL_CreateWindow( "SDL Window", 0, 0, 800, 600, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN );
    if( window == nullptr ) {
        return -1;
    }
    unsigned int major = 4;
    unsigned int minor = 3;
    SDL_GLContext context = nullptr;
    while( context == nullptr ) {
        SDL_GL_SetAttribute( SDL_GL_CONTEXT_MAJOR_VERSION, major );
        SDL_GL_SetAttribute( SDL_GL_CONTEXT_MINOR_VERSION, minor );
        context = SDL_GL_CreateContext( …
Run Code Online (Sandbox Code Playgroud)

c++ opengl sdl glx sdl-2

5
推荐指数
1
解决办法
3101
查看次数

在MinGW中使用cabal编译SDL

我正试图在MinGW中为Haskell安装SDL,但我遇到了一些问题.cabal找不到C库,我不知道为什么.这里有一些信息:

  • 我已经下载了SDL1.2的dev和runtime库;
  • 对于开发版本,我make native吧:它安装在/usr/include/SDL/usr/lib;
  • 我尝试过cabal install SDL,它失败了,因为它找不到头文件和lib;
  • 然后,我再试一次cabal install SDL --extra-include-dirs=/usr/include/SDL --extra-lib-dirs=/usr/lib.它找到头文件但仍然不是lib;
  • 我复制的运行时库SDL.dll/usr/lib,仍然有同样的烦恼;
  • 最后,我添加/usr/lib到两个PATHLD_LIBRARY_PATH,仍然无法找到@!#*C库.

你有好主意吗?

haskell sdl mingw cabal sdl-1.2

5
推荐指数
0
解决办法
457
查看次数

MongoDB查询到distinct,sort,limit和offset

我正在寻找一个相当于以下的Mongo:

select distinct event_type_id from events
order by created_at desc
limit 10,20
Run Code Online (Sandbox Code Playgroud)

Event Mongo文件如下:

{
  _id: BSON(), event_type_id: 1, created_at: Date(), other_data: {}
}
Run Code Online (Sandbox Code Playgroud)

sql mongodb

5
推荐指数
1
解决办法
1万
查看次数

我应该确保在退出程序之前销毁SDL 2.0对象(渲染器,窗口,纹理等)吗?

关于SDL 2.0的教程使用从main返回的代码,而不首先销毁任何资源指针:

int main(int argc, char** argv){
    if (SDL_Init(SDL_INIT_EVERYTHING) == -1){
        std::cout << SDL_GetError() << std::endl;
        return 1; 
    }

    window = SDL_CreateWindow("Lesson 2", SDL_WINDOWPOS_CENTERED, 
        SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
    if (window == nullptr){
        std::cout << SDL_GetError() << std::endl;
        return 2; //this
    }
    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED 
        | SDL_RENDERER_PRESENTVSYNC);
    if (renderer == nullptr){
        std::cout << SDL_GetError() << std::endl;
        return 3; //and this too
    }
Run Code Online (Sandbox Code Playgroud)

在退出之前,我应该告诉我的终止函数是DestroyRenderer,DestroyWindow,DestroyTexture等吗?

c++ sdl sdl-2

5
推荐指数
1
解决办法
2090
查看次数

LINUX-KERNEL:Perf 报告共享对象在 ARM 上显示未知

perf15 天以来我一直面临着一个相关问题。希望这里的大佬们能帮我解决这个问题。

我需要让perf工具在具有 ARM 架构的设备上运行。但是,在记录跟踪点事件然后运行./perf报告时,它显示共享对象名称为[unknown],符号为00000,而对于软件和硬件事件,我没有遇到此问题。我已经交叉编译了perfmailine上可用的工具并将其移植到具有ARM架构的设备上。

在内核 3.4 的基于 ARM 的设备上输出。

./perf record -e kmem:kmalloc cal

[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.007 MB perf.data (~321 samples) ]

./perf report 

Overhead        Command          Shared Object                  Symbol
.......     .............      ..............               ...............
40.78%           cal                [unknown]                [.]00000000
31.6%            cal                [unknown]                [.]00000000

[...]
Run Code Online (Sandbox Code Playgroud)

在 ubuntu 12.04 系统(内核 3.10)上它工作得很好。

x86 架构上的输出

./perf record -e kmem:kmalloc …
Run Code Online (Sandbox Code Playgroud)

linux-kernel perf

5
推荐指数
0
解决办法
2071
查看次数

如何在gitk中配置字体大小?

使用Linux,如何在gitk中配置字体和字体大小?

浏览菜单可能非常令人沮丧,因为它们提供的配置可能性非常小.

linux git gitk

5
推荐指数
1
解决办法
2825
查看次数