এসডিএল রেন্ডারার কী?


103

আমি এসডিএল 2 দিয়ে শুরু করছি এবং এসডিএল_দাতা কী তা বোঝার চেষ্টা করে কিছু সমস্যা হচ্ছে।

এটা কি? এটার কাজ কি? এসডিএল_রেন্ডারার, এসডিএল_উন্ডো, এসডিএল_সর্ফেস এবং এসডিএল_র কাঠামোর মধ্যে পার্থক্য কীভাবে এবং সেগুলি কীভাবে সম্পর্কিত?

এই প্রবর্তক কোডটি বোঝার চেষ্টা করার সময় আমার এতে সমস্যা ছিল:

#include <iostream>
#include <SDL2/SDL.h>

int main()
{
    /* Starting SDL */
    if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
        std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl;
        return 1;
    }

    /* Create a Window */
    SDL_Window *window = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
    if (window == nullptr) {
        std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl;
        return 1;
    }

    /* Create a Render */
    SDL_Renderer *render = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    if (render == nullptr) {
        std::cout << "SDL_CreateRenderer Error: " << SDL_GetError() << std::endl;
        return 1;
    }

    /* Load bitmap image */
    SDL_Surface *bmp = SDL_LoadBMP("./Tutorial/res/Lesson1/hello.bmp");
    if (bmp == nullptr) {
        std::cout << "SDL_LoadBMP Error: " << SDL_GetError() << std::endl;
        return 1;
    }

    /* Upload surface to render, and then, free the surface */
    SDL_Texture *texture = SDL_CreateTextureFromSurface(render, bmp);
    SDL_FreeSurface(bmp);
    if (texture == nullptr){
        std::cout << "SDL_CreateTextureFromSurface Error: " << SDL_GetError() << std::endl;
        return 1;
    }

    /* Draw the render on window */
    SDL_RenderClear(render); // Fill render with color
    SDL_RenderCopy(render, texture, NULL, NULL); // Copy the texture into render
    SDL_RenderPresent(render); // Show render on window

    /* Wait 2 seconds */
    SDL_Delay(5000);

    /* Free all objects*/
    SDL_DestroyTexture(texture);
    SDL_DestroyRenderer(render);
    SDL_DestroyWindow(window);

    /* Quit program */
    SDL_Quit();
    return 0;
}

আমি টুইঙ্কলবার টিউটোরিয়াল (এসডিএল উইকিতে প্রস্তাবিত) ব্যবহার করেছিলাম এবং এসডিএল উইকি ডকুমেন্টেশন এবং কিছু বইয়ের দিকেও নজর রেখেছিলাম। তবে তাদের সবাই ধরে নিয়েছে যে আমি এই সংজ্ঞাগুলি জানি।

উত্তর:


196

SDL_Window

SDL_Window উইন্ডো সম্পর্কে সমস্ত তথ্য ধারণ করে এমন কাঠামো: আকার, অবস্থান, পূর্ণ স্ক্রিন, সীমানা ইত্যাদি itself


SDL_Renderer

SDL_Rendererএমন একটি কাঠামো যা সমস্ত রেন্ডারিং পরিচালনা করে। এটি এমনভাবে আবদ্ধ SDL_Windowযাতে এটি কেবল তার মধ্যেই রেন্ডার করতে পারে SDL_Window। এটি রেন্ডারিং সম্পর্কিত সেটিংসও ট্র্যাক করে। এর সাথে বেশ কয়েকটি গুরুত্বপূর্ণ কাজ রয়েছেSDL_Renderer

  • SDL_SetRenderDrawColor(renderer, r, g, b, a);
    এটি আপনার স্ক্রিনটি সাফ করার রঙটি সেট করে (নীচে দেখুন)

  • SDL_RenderClear(renderer);
    এটি উপরের অঙ্কনের রঙের সেট সহ রেন্ডারিং লক্ষ্য সাফ করে

  • SDL_RenderCopy(
    এটি সম্ভবত আপনি যে ফাংশনটি সবচেয়ে বেশি ব্যবহার করবেন এটি একটি রেন্ডারিংয়ের জন্য ব্যবহৃত হয় SDL_Textureএবং নিম্নলিখিত প্যারামিটারগুলি থাকে:

    • SDL_Renderer* renderer,
      রেন্ডারিং আপনি রেন্ডারিংয়ের জন্য ব্যবহার করতে চান want
    • SDL_Texture* texture,
      আপনি যে টেক্সচারটি রেন্ডার করতে চান।
    • const SDL_Rect* srcrect, আপনি যে টেক্সচারটি রেন্ডার করতে চান তার অংশটি, আপনি যদি পুরো টেক্সচারটি রেন্ডার করতে চান তবে NULL করুন
    • const SDL_Rect* dstrect)
      যেখানে আপনি উইন্ডোতে টেক্সচারটি রেন্ডার করতে চান। যদি এর প্রস্থ এবং উচ্চতা SDL_Rectটেক্সচারের মাত্রার চেয়ে কম বা বড় হয় তবে টেক্সচারটি এটি অনুসারে প্রসারিত করা হবেSDL_Rect
  • SDL_RenderPresent(renderer);
    অন্যান্য এসডিএল_রেন্ডার * ফাংশনগুলি একটি গোপন লক্ষ্যকে আঁকায়। এই ফাংশনটি এটি সমস্ত নেবে এবং এটি রেন্ডারারের সাথে আবদ্ধ উইন্ডোতে আঁকবে।

SDL_Textures এবং SDL_Surface

SDL_Rendererউপস্থাপনা SDL_Textureকোনটি উপাদানের পিক্সেল তথ্য সঞ্চয় করে। এটির নতুন সংস্করণ SDL_Surfaceযা অনেকটা একই। পার্থক্যটি বেশিরভাগ SDL_Surfaceক্ষেত্রে কেবলমাত্র একটি structপিক্সেল তথ্যযুক্ত, যখন SDL_Textureপিক্সেল ডেটার একটি দক্ষ, ড্রাইভার-নির্দিষ্ট উপস্থাপনা।

আপনি একটি এসডিএল_স্ফেস * কে এসডিএল_আউটচার ব্যবহার করে রূপান্তর করতে পারেন

SDL_Texture* SDL_CreateTextureFromSurface(SDL_Renderer* renderer,
                                          SDL_Surface*  surface)

এর পরে, এসডিএল_সেসফেসটি ব্যবহার করে মুক্ত করা উচিত

SDL_FreeSurface( SDL_Surface* surface )

আর একটি গুরুত্বপূর্ণ পার্থক্য হ'ল SDL_Surfaceসফ্টওয়্যার রেন্ডারিং (সিপিইউয়ের মাধ্যমে) SDL_Textureব্যবহার করার সময় হার্ডওয়্যার রেন্ডারিং (জিপিইউয়ের মাধ্যমে) ব্যবহার করে।


SDL_Rect

এসডিএলে সহজ স্ট্রাক্ট। এটিতে কেবল চারটি শর্ট রয়েছে। x, yযা অবস্থান ধারণ করে এবং w, hযা প্রস্থ এবং উচ্চতা ধারণ করে।

এটি লক্ষ করা গুরুত্বপূর্ণ যে 0, 0এটি এসডিএলের উপরের-বাম কোণে। সুতরাং একটি উচ্চ- yমূল্য মানে নীচু এবং নীচে-ডান কোণার স্থানাঙ্ক থাকবেx + w, y + h


আপনি আমার ব্লগে এসডিএল 2 সম্পর্কে আরও পড়তে পারেন


1
আপনি যখন এসডিএল_রেন্ডারপ্রেসনকে কল করবেন তখন আপনি যে সেটাকে সেট আপ করেছেন সেগুলি এবং এটিতে আপলোড করা টেক্সচারের সাথে কী এই রেন্ডারারকে নিয়ে যায় এবং এটি উইন্ডোতে এই তথ্যগুলি রেন্ডার করে তোলে?
প্রজাস্ট্রো

3
@ অলিভগার্ড, দুর্দান্ত উত্তর। কেবল এসডিএল_আউটচার এবং এসডিএল_সর্ফেসের মধ্যে পার্থক্যটি স্পষ্ট করার জন্য, আমি জোর দিয়ে বলব যে জিপিইউ এবং এসডিএল_সর্ফেস ব্যবহার করে এসডিএল_সঠন রেন্ডারগুলি সফ্টওয়্যার রিডারিং ব্যবহার করে, যা কম দক্ষ তবে আপনাকে পিক্সেল তথ্য অবাধে ম্যানিপুলেট করতে দেয়। এছাড়াও, দুর্দান্ত ব্লগ, আমি অবশ্যই এটি পড়ব :)
ফ্যাবিও পিচ্চি

"এটি উপরের অঙ্কনের রঙের সেট দিয়ে রেন্ডারিং লক্ষ্যটি সাফ করে" বিবৃতিটি আমার বিশ্বাস, সঠিক তবে আমি বিবৃতিতে "ক্লিয়ারস" শব্দটি বুঝতে অক্ষম। ডক সবসময় এই শব্দগুচ্ছ ব্যবহার করে। আপনি এখানে দয়া করে "পরিষ্কার" এর অর্থ কী তা ব্যাখ্যা করতে পারেন ? রেন্ডারারের বর্তমান অঙ্কনের রঙের সাথে এর অর্থ কী "পেইন্ট" (সাজানো)?
নওয়াজ

SDL_Surfaceওভার ব্যবহার করার কোনও কারণ আছে SDL_Renderer?
স্টিভয়েসিয়াক

শীর্ষের উত্তরের কিছুটা অসম্পূর্ণতা রয়েছে, এসডিএল_রেন্ডারার কেবল উইন্ডোতেও নয়, পৃষ্ঠের সাথেও বেঁধে রাখতে পারেন, দয়া করে লিঙ্কটি পরীক্ষা করুন: উইকি.লিবসডল.আর
এসডিএল_ক্রেটসোফটওয়্যার

9

SDL_Windowশারীরিক পিক্সেল এবং SDL_Rendererসেটিংস / প্রসঙ্গ সংরক্ষণের জায়গা হিসাবে ভাবেন ।

সুতরাং আপনি প্রচুর সংস্থান তৈরি করেন এবং এটিকে উপস্থাপক থেকে ঝুলিয়ে দেন; এবং তারপরে এটি প্রস্তুত হয়ে গেলে আপনি রেন্ডারকে সব কিছু একসাথে রাখার জন্য ফলাফলটি উইন্ডোতে প্রেরণ করতে বলেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.