标签: sdl

我使用 SDL,我的程序大量使用 CPU

调用SDL函数时如何使用显卡而不是CPU?

sdl

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

为什么在 Mingw 中设置 sdl 时必须在主函数中传递参数?

这些论据有什么用?还有其他方法可以在不使用 main 中的参数的情况下运行 SDL 吗?

int main( int argc, char* args[] )
Run Code Online (Sandbox Code Playgroud)

c++ sdl mingw

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

确定 SDL_surface 的宽度/高度的 SDL_function?

我想制作一个包含 SDL_Surface 、 SDL_Rect 、表面宽度和高度的结构,

这是原型:

typedef struct wall wall;

struct wall {
    SDL_Surface *wall;
    SDL_Rect  wallpos;
    int x;             
    int y;
};
Run Code Online (Sandbox Code Playgroud)

问题是我不想手动生成 wall.x 和 wall.y。

是否有任何 SDL_function 可以根据加载的图像的尺寸确定 SDL_surface 的宽度/高度?

c struct sdl

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

SDL 清除 SDL_SetTextureColorMod 效果

我正在使用 SDL_SetTextureColorMod 函数来修改纹理。正如在这个问题的答案中看到,该函数本身不修改纹理,只在绘制时进行颜色修改。

问题是,在调用 SDL_SetTextureColorMod 时,我无法重置效果,而且我在网上找不到任何东西。简而言之,我想为纹理添加例如变暗效果。但是,我希望能够绘制原始纹理。在应用程序中按 G 时,会应用效果。我也试过

SDL_SetTextureColorMod(texture, 1, 1, 1);
Run Code Online (Sandbox Code Playgroud)

但这并没有重置效果

代码

#include <SDL.h>
#include <SDL_image.h>

#include <iostream>

using namespace std;

int main2();

int WinMain()
{
    main2();
}
SDL_Texture* LoadTexture( const string& Filename, SDL_Renderer * renderer )
{
    if(renderer == nullptr)
        return nullptr;

    SDL_Texture* texture = IMG_LoadTexture( renderer, Filename.c_str() );
    if ( texture == nullptr )
    {
        std::cout << __FUNCTION__ << "(...): " << "Failed to load texture " << Filename << " error …
Run Code Online (Sandbox Code Playgroud)

sdl

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

如何使用 SDL C++ 在 win32 窗口中设置 GUI 按钮?

我是 SDL 和游戏开发的新手。我想制作一个游戏,我需要在游戏窗口中放置一个“开始”按钮。所以请任何人都可以帮助我如何做到这一点?整个屏幕没有鼠标事件我只想创建一个按钮来点击它,我可以在哪里插入按钮的代码?这是我的代码:

 int main (int argc, char *argv[]){
    int quit = 0;
    SDL_Init(SDL_INIT_VIDEO);
    SDL_Window* window = NULL;
    window = SDL_CreateWindow("Snaykie v1.0",350, 150, 800, 500,    SDL_WINDOW_SHOWN);
    if (window == NULL){
        std::cout << "Can not open the game" << std::endl;
        return 0;
    }
    SDL_Renderer* renderer = NULL;
    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    SDL_Event* evt = new SDL_Event();

    SDL_Texture* txt = NULL;
    txt = IMG_LoadTexture(renderer, "mainview.bmp");

    SDL_Rect rct;
    rct.x = 0 ;
    rct.y = 0;
    rct.h = 500;
    rct.w = 800;

    SDL_Surface …
Run Code Online (Sandbox Code Playgroud)

c++ sdl

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

如何在 MSYS2 中设置 SDL2?我收到错误“对‘WinMain’的未定义引用”

$ make
g++ main.cpp -I/mingw/include -L/mingw/lib -w -Wall -lSDL2main -lSDL2 -o test
/usr/lib/../lib/libmsys-2.0.a(libcmain.o): In function `main':
/msys_scripts/msys2-runtime/src/msys2-runtime/winsup/cygwin/lib/libcmain.c:37: undefined reference to `WinMain'
/msys_scripts/msys2-runtime/src/msys2-runtime/winsup/cygwin/lib/libcmain.c:37:(.text.startup+0x94): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `WinMain'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

Mingw 教程和我的教程之间的区别是 '-lmingw32' 选项。

但是 MSYS2 中没有“mingw32”文件。

如何解决?

sdl sdl-2 msys2

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

RenderDOC 和 SDL2

我想用 RenderDoc 调试我的程序。我使用标准函数创建了上下文SDL_GL_CreateContext。使用 RenderDoc 运行应用程序时出现此错误:

捕获 OpenGL。上下文不是通过 CreateContextAttribs 创建的。捕获已禁用。仅支持 OpenGL 3.2+ 上下文。

我在创建上下文之前添加了这个参数:

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
Run Code Online (Sandbox Code Playgroud)

这应该会强制执行核心配置文件,但错误仍然存​​在。

我在这里做错了什么?

- - -编辑 - - -

即使在强制使用 3.2 版本(需要确切的版本)之后,事情仍然会抱怨。

这是我的窗口类的初始化块:

//System init


if(!SDL_WasInit(SDL_INIT_EVERYTHING))
    SDL_Init(SDL_INIT_EVERYTHING);

this->SDL_window = SDL_CreateWindow(title,10,10,w,h,SDL_WINDOW_OPENGL);
if(this->SDL_window!=NULL)
{
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);

    SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);

    this->context = SDL_GL_CreateContext(SDL_window);
    if(!this->context)
    {
        SDL_DestroyWindow(SDL_window);
        COUT<<"FAILED TO CREATE CONTEXT. PRINTING ERROR AND THROWING EXCEPTION"<<ENDL;
        COUT<<SDL_GetError()<<ENDL;
        throw "ENGINE::WINDOW::GLCONTEXTERR";
    }
        glewExperimental = GL_TRUE;
        glewInit();
}
else
{
    COUT<<"FAILED TO CREATE WINDOW. PRINTING ERROR AND THROWING EXCEPTION"<<ENDL;
    COUT<<SDL_GetError()<<ENDL;
    throw "ENGINE::WINDOW::SDLWINDOWERR"; …
Run Code Online (Sandbox Code Playgroud)

opengl sdl renderdoc

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

调用 glGenFramebuffers() 时出现段错误?

我想在 3D 之上做一些 2D,这样我就可以做一个像样的 GUI。所以我创建了纹理等等。

我可以编译代码,它不会产生任何错误。但是当我运行程序时一切正常,直到我调用以下命令:

glGenFramebuffers(1, &fb);
Run Code Online (Sandbox Code Playgroud)

然后出现这样的情况:

error 139 segmentation fault (core dumped).
Run Code Online (Sandbox Code Playgroud)

有人知道代码有什么问题吗?

std::cout << "test1" << std::endl;

unsigned int fb;
glGenFramebuffers(1, &fb);
std::cout << "test2" << std::endl;
glBindRenderbuffer(GL_RENDERBUFFER, fb);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, renderTexture.getId(), 0);
Run Code Online (Sandbox Code Playgroud)

显示“test1”文本,但不显示“test2”。

代码:

游戏.cpp

#include "game.h"

game::game(){
    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_Surface* screen = SDL_SetVideoMode(1000, 600, 32, SDL_SWSURFACE|SDL_OPENGL);

    glClearColor(0.5, 0.5, 0.5, 1.0);
    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();
    gluPerspective(45, 1000.0/600.0, 1.0, 500.0);
    glMatrixMode(GL_MODELVIEW);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_TEXTURE_2D);
}

game::~game(){
    SDL_Quit();
}

void game::start(){
    Uint32 start;
    SDL_Event event;

    texture renderTexture = texture();
    glTexImage2D(GL_TEXTURE_2D, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glew sdl

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

SDL_DisplayFormatAlpha() 的 SDL 2.0 版本?

我开始在 SDL 2.0 中编程。我希望能够将 .PNG 文件加载到我的程序中,因为 .bmp 文件没有 .png 文件的所有简洁功能。

我有来自http://www.sdltutorials.com/sdl-image的以下代码:

SDL_Surface* loadSurf(char* File) {
SDL_Surface* Surf_Temp = NULL;
SDL_Surface* Surf_Return = NULL;

if((Surf_Temp = IMG_Load(File)) == NULL) {
    return NULL;
}

Surf_Return = SDL_DisplayFormatAlpha(Surf_Temp);
SDL_FreeSurface(Surf_Temp);

return Surf_Return;
}
Run Code Online (Sandbox Code Playgroud)

该函数的重点是加载图像,您可以通过执行以下操作来调用它:

SDL_Surface* character = loadSurf("sprite.png");
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,“Surf_Return = SDL_DisplayFormatAlpha(Surf_Temp);”行出现错误。错误是:使用未声明的标识符“SDL_DisplayFormatAlpha”

我认为这是因为代码是为 SDL 1.2 编写的,而我使用的是 SDL 2.0。有没有办法将此功能转换为 SDL 2.0?

如果适用,我正在运行 Mac OSX 10.13.2。

c++ sdl image sdl-2 sdl-1.2

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

如何从 Linux 编译到 Windows 的 SDL2 应用程序?

所以最近我在 Windows 10 上下载了 Linux 子系统和 Ubuntu。

我可以使用该命令将 SDL2 应用程序编译到 Linux g++,但每当我尝试使用i686-w64-mingw32-g++此命令执行此操作时,都会收到一条错误消息main.cpp:5:9: fatal error: SDL2/SDL.h: No such file or directory

我使用的命令是i686-w64-mingw32-g++ main.cpp -w -lSDL2 -o main.exe.

https://i.stack.imgur.com/TlZmQ.jpg

有人知道如何解决这个问题吗?:(

[编辑]

所以现在我尝试使用以下命令指定必要文件的目录:g++ main.cpp -I/usr/include/SDL -L/usr/lib/x86_64-linux-gnu -w -Wall -Wextra -std=c++17 -lSDL2 -o main

这有效,但是当我将它与 mingw 一起使用时,它不起作用i686-w64-mingw32-g++ main.cpp -I/usr/include/SDL -L/usr/lib/x86_64-linux-gnu -w -Wall -Wextra -std=c++17 -lSDL2 -o main

https://i.stack.imgur.com/OfCRt.jpg

c++ linux ubuntu sdl mingw

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

标签 统计

sdl ×10

c++ ×5

mingw ×2

opengl ×2

sdl-2 ×2

c ×1

glew ×1

image ×1

linux ×1

msys2 ×1

renderdoc ×1

sdl-1.2 ×1

struct ×1

ubuntu ×1