• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.

Archived

This topic is now archived and is closed to further replies.

randomZ

Problem with Alpha blitting in SDL

4 posts in this topic

Hi, I''m trying to create a text rendering system in SDL (C++, mingw, Dev-C++) the following way: - I have a character map which contains all characters I need - I have a font definition file which contains the coordinates of the characters within the map 1. I (obviously) load the character map (which is in a PNG with alpha channel) into an SDL_Surface this way:
  SDL_Surface* surface1 = IMG_Load(filename);
  SDL_Surface* fontImage = SDL_DisplayFormatAlpha(surface1);
  SDL_FreeSurface(surface1);
 
When I blit this to the screen, it looks perfect, with correct transparencies and everything. 2. I have the function renderText():
  SDL_Surface* surface1 = SDL_CreateRGBSurface(SDL_SRCALPHA, width, height, 32,
    0xFF000000, 0x00FF0000, 0x0000FF00, 0x000000FF);
  SDL_Surface* target = SDL_DisplayFormat(surface1);
  SDL_FreeSurface(surface1);

  //For every character...
    SDL_BlitSurface(fontImage, &srcrct, target, &dstrct);

  return target;
 
The rectangles in the blit command are correct, I''ve checked that. This is where things get messed up. When I use SDL_DisplayFormat() as in the example, I don''t get an alpha channel, but my text is rendered white on black. If I use SDL_DisplayFormatAlpha(), nothing is rendered at all! What could be the cause? --- Just trying to be helpful. Sebastian Beschke Just some student from Germany http://mitglied.lycos.de/xplosiff
0

Share this post


Link to post
Share on other sites
I ran into the same problem.

When you blit RGBA->RBGA the destinations alpha channel doesn''t change. It acts like a mask. If all the alphas are zero, then the mask is all zero and nothing gets blitted.

I ended up writinga function to copy from one surface to another that copies the alpha with it (reguardless of the destinations alpha).

Here is the code. It makes a lot of assumptions because it is specialized to what I needed. For example it will only write starting at 0,0 of the dest, assumes 32bits. I know that it fails under some situations so beware

Oh yeah, If you find a better way would you toss it my way also?


void br_blit(SDL_Surface* src, SDL_Rect sr, SDL_Surface* dst)
{
// always copies to 0, 0 of the dest

int numPixelsOnLine = sr.w;
int bytesToMove = numPixelsOnLine * 4;
unsigned char* srcPixels = static_cast<unsigned char*>(src->pixels);
unsigned char* dstPixels = static_cast<unsigned char*>(dst->pixels);

for (int y=0; y<sr.h; y++)
{
unsigned char* destP = &dstPixels[y*bytesToMove];
unsigned char* srcP = &srcPixels[((sr.y+y)*src->w*4)+sr.x*4];
memcpy(destP, srcP, bytesToMove);
}
}
0

Share this post


Link to post
Share on other sites
Hi,

I've asked this question on the SDL mailing list and got the following:

- This info from Sean Ridenour:

What happens in professional compositing
programs when using the standard over operation is this:
1. If the foreground image is premultiplied, go to step 3
2. Multiply the foreground image against its own alpha channel
3. Invert the foreground image's alpha channel
4. Multiply the background image (all channels) by the foreground image's newly inverted alpha channel.
5. Revert the foreground image's alpha channel to its original state
6. Add the foreground image to the background image (all channels)

- The pygame source code contains an alpha blit function.
clicky
(Thanks Pete Shinners)

EDIT: Sabbac: I've tried to send you an email, but it didn't work

---
Just trying to be helpful.

Sebastian Beschke
Just some student from Germany
http://mitglied.lycos.de/xplosiff

[edited by - randomZ on October 9, 2003 3:10:07 PM]
0

Share this post


Link to post
Share on other sites
Thanks for the info.

And thanks for reminding me to update that stale email address
0

Share this post


Link to post
Share on other sites