Không load được image trong SDL2

mỗi bước mình đều để printf để kiểm tra quá trình chạy, k hề có lỗi nhưng mà khi run exe thì lại k lên hình :frowning:

quá mệt mỏi với cái này :frowning: ai giúp e với.

[code]bool loadMedia()
{
//Loading success flag
bool success = true;

//Load PNG texture
g_texture = loadTexture("main_bg.png");
if( g_texture == NULL )
{
	printf( "Failed to load texture image!\n" );
	success = false;
}
printf("load img xong! \n");
return success;

}[/code]

link tut: http://lazyfoo.net/tutorials/SDL/07_texture_loading_and_rendering/index.php

Bạn thử xem cái này nhé!

1 Like

ảnh vẫn k load đươc, vẫn window trắng phau :frowning:

có vẽ cái ảnh lên window chưa?

có gọi render present chưa?

hàm loadTexture() đâu?

các dòng lệnh vẽ đâu?

        SDL_RenderClear( g_renderer );


        SDL_RenderCopy( g_renderer, g_texture, NULL, NULL );


        SDL_RenderPresent( g_renderer );

        SDL_Delay(5000);[/code]

có rồi bạn :frowning:

1 Like

copy toàn bộ cái main.cpp lên luôn đi :joy:

1 Like

here you are :smiley:

[code]#include <SDL.h>
#include <SDL_image.h>
#include <stdio.h>
#include “commonFunc.h”

int main(int argc, char* args[])
{
if(!Init())
{
printf(“can’t initialize \n”);

}
else
{

    if( !loadMedia() )
    {
        printf("can't load backgroud");
    }
    else
    {

        SDL_RenderClear( g_renderer );


        SDL_RenderCopy( g_renderer, g_texture, NULL, NULL );


        SDL_RenderPresent( g_renderer );

        SDL_Delay(5000);
    }
}
Close();
return 0;

}
[/code]

1 Like

luôn mấy cái commonFunc.h .cpp gì luôn đi, để xem g_renderer nó khởi tạo ra sao. Mà main ko có main loop while (!quit) gì đó à? Qua phần Lesson 03 Event Driven Programming rồi mà sao ko thấy main loop đâu cả

ko, mình test cái render ảnh là chủ yếu nên k dùng loop.

1 Like

bạn thử xóa chữ static trong mấy cái biến global g_ coi, và gộp chung tất cả thành 1 file. common.h trước rồi tới common.cpp rồi sau cùng là main.cpp, gộp thành 1 file.

nếu muốn tách 1 file thành 3 files thì cái bạn muốn là xài extern cho mấy biến này. Global variables fuck tạp lắm.

sửa

static SDL_Window *g_window = NULL;
static SDL_Renderer *g_renderer = NULL;
static SDL_Texture *g_texture = NULL;

thành

extern SDL_Window *g_window;
extern SDL_Renderer *g_renderer;
extern SDL_Texture *g_texture;

và trong main.cpp thêm

SDL_Window *g_window = NULL;
SDL_Renderer *g_renderer = NULL;
SDL_Texture *g_texture = NULL;

thấy rối quá hả? extern là gì, static tại sao ko xài được? Câu trả lời là đừng xài global variables =)

cái chính là mình chia nhỏ file ra để làm game mà, để 1 file, works fine :frowning:

vậy là đúng nó rồi, static global variables mỗi file cpp sẽ tự tạo 1 cái riêng, ko phải chơi chung. Vì vậy phải xài extern, và chỉ khai báo mấy biến này ở 1 file cpp nào đó thôi, ở đây là khai báo ở main.cpp, common.cpp vì ghi là extern ... sẽ xài 3 biến external (bên ngoài common.cpp) này.

fu*k, được rồi, thanks sir. Chắc phải học lại mấy cái biến biến này :(.

khổ dâm vài tuần nữa cho biết SDL2 đi rồi về với đội SFML =)

mình đang học cái này trên lớp :smiley: hí hí

thật ra mình chưa hiểu rõ cái header này lắm, nhưng gì cần khai báo trong .h và trong .cpp mình chưa rõ. bạn hiểu rõ giải thích cho mình được k :smiley:

đừng khai báo biến global trong file .h, vậy thôi @_@ Hằng số global thì tạm được.

1 Like

k y mình là nên khai báo cái thư viện (include) như thế nào ở file h và cpp

file nào cần thư viện gì thì include thư viện đó ở file đó. Hay include quẳng trong .cpp hết, thư viện nào .h cần thì để ở .h

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?