1 year ago
#43856
Yacine Megrah
SDL_TTF, Render Modes are identical in quality
I have a click based game to code, and It contains some text that need to be rendererd in real-time,I tried to render the text with TTF_RenderText_Solid()
, TTF_RenderText_Shaded()
,TTF_RenderText_Blended()
but they all render the same poor quality text. I have tried to change the BlendMode of the renderer, Surface and Texture, but still the same result, You might think it is because of using the same surface over and over, but I am sure it's not that.
screenshot
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>
#define Title "Test"
#define font01 "src/fonts/Roboto-Regular.ttf"
#define font01_size 48
typedef struct {
SDL_Texture *txtu;
SDL_Rect rect;
SDL_Color clr;
char* text;
} text_t;
int main(int argc,char* argv[])
{
SDL_Init(SDL_INIT_EVERYTHING);
TTF_Init();
SDL_Window *window = SDL_CreateWindow(Title,SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,480,720,SDL_WINDOW_OPENGL);
SDL_Renderer *renderer = SDL_CreateRenderer(window,-1,SDL_RENDERER_ACCELERATED|SDL_RENDERER_TARGETTEXTURE);
TTF_Font *font1 = TTF_OpenFont(font01,font01_size);
SDL_SetRenderDrawBlendMode(renderer,SDL_BLENDMODE_BLEND);
SDL_Surface *Load_srfc = NULL;
SDL_SetSurfaceBlendMode(Load_srfc,SDL_BLENDMODE_BLEND);
//SDL_CreateTexture(renderer,SDL_PIXELFORMAT_RGBA8888,SDL_TEXTUREACCESS_TARGET,480,720);
SDL_SetRenderDrawColor(renderer,0,0,0,255);
SDL_RenderFillRect(renderer,NULL);
SDL_Delay(500);
text_t text1 = {NULL,{0,0,220,60},{255,255,255,240},"015:32.665 ms"};
text_t text2 = {NULL,{20,70,220,60},{255,255,255,240},"015:32.665 ms"};
text_t text3 = {NULL,{40,140,220,60},{255,255,255,240},"015:32.665 ms"};
Load_srfc = TTF_RenderText_Solid(font1,text1.text,text1.clr);
text1.txtu = SDL_CreateTextureFromSurface(renderer,Load_srfc);
SDL_SetTextureBlendMode(text1.txtu,SDL_BLENDMODE_BLEND);
SDL_FreeSurface(Load_srfc); Load_srfc=NULL;
SDL_RenderCopy(renderer,text1.txtu,NULL,&text1.rect);
SDL_RenderPresent(renderer);
SDL_Delay(500);
SDL_Color back = {240,30,50,245};
Load_srfc = TTF_RenderText_Shaded(font1,text2.text,text2.clr,back);
text2.txtu = SDL_CreateTextureFromSurface(renderer,Load_srfc);
SDL_SetTextureBlendMode(text2.txtu,SDL_BLENDMODE_BLEND);
SDL_FreeSurface(Load_srfc); Load_srfc=NULL;
SDL_RenderCopy(renderer,text2.txtu,NULL,&text2.rect);
SDL_RenderPresent(renderer);
SDL_Delay(500);
Load_srfc = TTF_RenderText_Blended(font1,text3.text,text3.clr);
text3.txtu = SDL_CreateTextureFromSurface(renderer,Load_srfc);
SDL_SetTextureBlendMode(text2.txtu,SDL_BLENDMODE_BLEND);
SDL_FreeSurface(Load_srfc); Load_srfc=NULL;
SDL_RenderCopy(renderer,text3.txtu,NULL,&text3.rect);
SDL_RenderPresent(renderer);
bool quit=0;
while(!quit)
{
SDL_Event evt;
while (SDL_PollEvent(&evt))
{
if(evt.type == SDL_QUIT ||
(evt.type == SDL_WINDOWEVENT && evt.window.event == SDL_WINDOWEVENT_CLOSE) ||
(evt.type == SDL_KEYDOWN && evt.key.keysym.sym == SDLK_ESCAPE)) {
quit = 1;
}
}
}
SDL_DestroyTexture(text1.txtu);
SDL_DestroyTexture(text2.txtu);
SDL_DestroyTexture(text3.txtu);
SDL_FreeSurface(Load_srfc);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
TTF_Quit();
SDL_Quit();
}
c
graphics
sdl
antialiasing
sdl-ttf
0 Answers
Your Answer