On Tuesday, 2 August 2022 at 19:16:09 UTC, Ahmet Sait wrote:
> Olmuyor demek yerine tam olarak ne yaptığını ve aldığın hata mesajlarını yazmanı öneririm.
ahh Ahmet kardeşim ne yaptığımı ve ne anladığımı bir kafamda oturtabilsem anlatacağım da :)
aslında şunu öğrenmek istiyorum diyerek konuyu sıfırdan ele alırsak; elimde D derleyicim var.. SDL ile notepad++ yada farketmez herangi bir editor ile D dilini ve SDL kütüphanesini kullanarak bir Form yada Pencere çizdirmek istiyorum ekranda. İlk hedefim sadece bu.
Şimdi gelelim senin bana salık verdiğin "ne yaptığını ve hata mesajlarını yaz" kısmına..
Dediklerinizi dikkate alarak Derelict yerine ondan vazgeçip BindBC ile denemeler yapmak istedim.
1- https://github.com/BindBC/bindbc-sdl adresinden ziplı dosyayı indirdim ve klasöre açtım
2- windows cmd ile bu klasöre girerek "dub.sdl" dosyasını çalıştırdım(hiç bir değişiklik yapmadan). dub bana lib klasörü oluşturdu sadece orada bulunan "BindBC_SDL.lib" dosyasını kaynak dosyamın bulunduğu klasöre kopyaladım.
3- https://libsdl.org/download-2.0.php adresinden SDL2-2.0.22-win32-x86.zip Runtime Binaries: indirdim ve içindeki "SDL2.dll" dosyasınıda kaynak dosyamın bulunduğu klasöre attım.
4- https://github.com/BindBC/bindbc-opengl buradan da opengl yi dub ile halledip oluşan BindBC_OpenGL.lib dosyasını kaynak dosyamın yanına attım
Kaynak kodum şu;
import std.stdio;
import std.string : fromStringz;
import std.conv;
import bindbc.sdl;
import bindbc.sdl.image;
import bindbc.opengl;
void main()
{
// Load SDL libs
const SDLSupport ret = loadSDL();
if(ret != sdlSupport) {
writeln("Error loading SDL dll");
return;
}
if(loadSDLImage() != sdlImageSupport) {
writeln("Error loading SDL Image dll");
return;
}
// Initialise SDL
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
writeln("SDL_Init: ", fromStringz(SDL_GetError()));
}
scope(exit) {
SDL_Quit();
}
// Initialise IMG
const flags = IMG_INIT_PNG | IMG_INIT_JPG;
if ((IMG_Init(flags) & flags) != flags) {
writeln("IMG_Init: ", to!string(IMG_GetError()));
}
scope(exit) {
IMG_Quit();
}
version(OSX) {
SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG); // Always required on Mac
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
} else {
SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, 0);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
}
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);
// Create a window
const windowFlags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_SHOWN;
SDL_Window* appWin = SDL_CreateWindow(
"Example #2",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
800,
600,
windowFlags
);
if (appWin is null) {
writefln("SDL_CreateWindow: ", SDL_GetError());
return;
}
scope(exit) {
// Close and destroy the window
if (appWin !is null) {
SDL_DestroyWindow(appWin);
}
}
// Load image
SDL_Surface* imgSurf = IMG_Load("grumpy-cat.jpg");
if (imgSurf is null) {
writeln("IMG_Load: ", to!string(IMG_GetError()));
}
scope(exit) {
// Close and destroy the surface
if (imgSurf !is null) {
SDL_FreeSurface(imgSurf);
}
}
SDL_GLContext gContext = SDL_GL_CreateContext(appWin);
if (gContext == null) {
writeln("OpenGL context couldn't be created! SDL Error: ", fromStringz(SDL_GetError()));
return;
}
scope(exit) {
if (gContext !is null) {
SDL_GL_DeleteContext(gContext);
}
}
const GLSupport openglLoaded = loadOpenGL();
if ( openglLoaded != glSupport) {
writeln("Error loading OpenGL shared library", to!string(openglLoaded));
return;
}
SDL_GL_MakeCurrent(appWin, gContext);
SDL_GL_SetSwapInterval(1); // Enable VSync
// Creating a texture from SDL Surface
glEnable(GL_TEXTURE_2D);
GLuint textureID = 0;
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
const mode = imgSurf.format.BytesPerPixel == 4 ? GL_RGBA : GL_RGB;
glTexImage2D(GL_TEXTURE_2D, 0, mode, imgSurf.w, imgSurf.h, 0, mode, GL_UNSIGNED_BYTE, imgSurf.pixels);
scope(exit) {
glDeleteTextures(1, &textureID);
}
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, 0);
// Initializin matrices
GLenum error = GL_NO_ERROR;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//Initialize Projection Matrix
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
//Check for error
error = glGetError();
if( error != GL_NO_ERROR ) {
return;
}
//Initialize Modelview Matrix
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
//Check for error
error = glGetError();
if( error != GL_NO_ERROR ) {
return;
}
//Initialize clear color
glClearColor( 0f, 0f, 0f, 1f );
//Check for error
error = glGetError();
if( error != GL_NO_ERROR ) {
return;
}
glFlush();
SDL_GL_SwapWindow(appWin);
// Polling for events
bool quit = false;
while(!quit) {
SDL_PumpEvents();
// Cleaning buffers
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor( 0f, 0f, 0f, 1f );
// Render something
glBindTexture(GL_TEXTURE_2D, textureID);
glBegin( GL_QUADS );
glColor3f(1.0f, 1.0f, 1.0f);
glTexCoord2f(0f, 0f);
glVertex2f( -0.5f, -0.5f );
glColor3f(1.0f, 0.0f, 0.0f);
glTexCoord2f(1f, 0f);
glVertex2f( 0.5f, -0.5f );
glColor3f(0.0f, 1.0f, 0.0f);
glTexCoord2f(1f, 1f);
glVertex2f( 0.5f, 0.5f );
glColor3f(0.0f, 0.0f, 1.0f);
glTexCoord2f(0f, 1f);
glVertex2f( -0.5f, 0.5f );
glEnd();
//Update screen
glFlush();
SDL_GL_SwapWindow(appWin);
SDL_Event event;
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
quit = true;
}
if (event.type == SDL_KEYDOWN) {
quit = true;
}
}
}
}
aldığım hata mesajı şu;
C:\Users\CoCo\Desktop\Yeni>dmd yeni_2
yeni_2.d(93): Error: unable to read module `sdl`
yeni_2.d(93): Expected 'bindbc\sdl.d' or 'bindbc\sdl\package.d' in one of the
following import paths:
import path[0] = C:\D\dmd2\windows\bin\..\..\src\phobos
import path[1] = C:\D\dmd2\windows\bin\..\..\src\druntime\import