STDIO
Tìm kiếm gần đây
    • Nội dung
    • QR Code
    • 0
    • 0
    • Sao chép

    GPU - Double Buffer và 1 Số Khái Niệm

    Giải thích các khái niệm double buffer, front buffer, back buffer, surface và texture.
    16/09/2014
    27/09/2020
    5 phút đọc
    GPU - Double Buffer và 1 Số Khái Niệm

    Quá trình vẽ 1 đối tượng đồ họa lên màn hình (monitor)

    Double buffer

    Double buffer là 1 cặp front buffer và back buffer, trong đó chương trình sẽ render lên back buffer, trong khi đó front buffer lại đẩy hình ảnh lên monitor trong cùng thời gian.

    Như vậy trong quá trình đang chờ đợi hình ảnh được hiển thị lên monitor thì chương trình vẫn có thể render lên back buffer.

    Sau khi front buffer đã render xong lên monitor, back buffer cũng render xong thì tiến hành đổi vị trí của back buffer và front buffer (swap buffer). Như vậy lúc này front buffer mới chính là back buffer cũ, tiến hành đẩy hình ảnh mới lên monitor.

    Khái niệm front buffer / frame buffer (bề mặt chính)

    Card đồ họa chứa thông tin muốn hiển thị lên màn hình. Khi muốn hiển thị dữ liệu, card đồ họa lấy dữ liệu cần hiển thị tại vùng nhớ đệm, được gọi là Front buffer (Frame buffer) gửi những thông tin đã lấy được đến monitor để hiển thị, monitor sẽ cập nhật những phần mới và vẽ lại từ trên xuống dưới.

    Front buffer nằm ở bộ nhớ đồ họa và biểu thị hình ảnh lên màn hình. Do đó, để thay đổi hiển thị trên màn hình theo ý muốn, cách đơn giản là thay đổi trực tiếp dữ liệu trên Front buffer. Nhưng có vấn đề nhỏ xảy ra, màn hình sẽ hiển thị thành hai phần, nửa trên là bức ảnh cũ còn nửa dưới là ảnh mới (điều này diễn ra nhanh nên sẽ cảm thấy màn hình lag và giật). Hiện tượng xảy ra là do 1 chương trình nào đó cập nhật trên Front buffer trong khi monitor đang trong quá trình refresh. Hay có thể hiểu là GPU render với số lượng frame lớn hơn số lượng frame hiển thị lên màn hình trong 1 giây (refresh rate) của monitor, thông thường refresh rate chỉ từ 60 Hz (fps) đến 100 Hz ở đa số màn hình, hiện tượng này được gọi là tearing screen.

    Khái niệm back buffer / off-screen surface (bề mặt phụ ngoài)

    Để giải quyết vấn đề trên, ngoài việc bật V-Sync còn có 1 kỹ thuật khác là Back buffering (double buffering).

    Back buffering là quá trình vẽ hình ảnh lên bề mặt phụ ngoài màn hình (off-screen surface), kiểu bề mặt này thực chất là 1 mảng pixel giống như bitmap. Back buffer cũng thuộc loại bề mặt này nhưng đặc biệt hơn. 1 bức ảnh thay vì được vẽ trực tiếp từ Front buffer lên monitor thì GPU sẽ vẽ ảnh từ Back buffer. Như vậy, muốn hiển thị những gì lên màn hình thì chỉ cần vẽ lên Back buffer.

    Bất kỳ bề mặt (surface) nào khác Front buffer thì được gọi là off-screen surface bởi vì chỉ có Front buffer mới hiển thị hình ảnh trực tiếp lên monitor.

    Thật sự khi sử dụng kỹ thuật back buffering thì hiện tượng tearing vẫn xảy ra, để tránh điều đó, GPU sử dụng 1 con trỏ cho mỗi buffer (cả Front và Back) để chuyển đổi giá trị giữa chúng 1 cách đơn giản. Quá trình chuyển từ Back buffer sang Front buffer được gọi là surface flipping. Hiểu đơn giản là sau khi vẽ lên Back buffer thì ra lệnh cho card đồ họa thay đổi vị trí của back buffer và front buffer, lúc này back buffer trở thành front buffer và đẩy dữ liệu lên monitor.

    Surface và Texture

    Surface giống như off-screen surface, surface được sử dụng cho rất nhiều thứ, phổ biến nhất là thao tác vẽ hoặc load 1 ảnh bitmap (png, jpg, ...) lên nó.

    Khi thao tác với Sprite, GPU sử dụng texture thay cho surface để lưu trữ sprite image, sự thay thế này thật sự cũng không mang lợi ích nào cho việc nâng cao hiệu suất, do phần cứng hiện nay khá mạnh để xử lý và không cảm nhận được sự khác biệt.

    Surface và texture có thể tạo bao nhiêu cũng được miễn là còn đủ RAM và VRAM để chứa.

    Double buffer (front buffer - back buffer)

    Tóm lại

    Front buffer là 1 vùng trên bộ nhớ được bộ xử lý hiển thị trực tiếp lên monitor. Trên GPU, các chương trình không được thao tác trực tiếp lên Front buffer.

    Back Buffer là 1 vùng trên bộ nhớ, các chương trình có thể thao tác trực tiếp lên đây hoặc sao chép từ surface khác,  Back buffer không hiển thị trực tiếp lên monitor.

    Surface (off-screen surface) là 1 bề mặt thứ cấp được lưu trữ trong bộ nhớ của card đồ họa hoặc có thể trong bộ nhớ của hệ thống, có thể thực hiện nhiều thao tác như vẽ bitmap, load ảnh.

    Texture 1 phần tương tự như surface và nó được sử dụng nhiều khi thao tác với Sprite.

    Bài chung series

    0
    Lập Trình Game

    Lập Trình Game

    Kiến thức, kỹ thuật, kinh nghiệm lập trình game.

    Khi bạn nhấn vào liên kết sản phẩm do STDIO đề xuất và mua hàng, STDIO có thể nhận được hoa hồng. Điều này hỗ trợ STDIO tạo thêm nhiều nội dung hữu ích.. Tìm hiểu thêm.

    Đề xuất

    Box2D - Phần 1: Giới Thiệu - Một Số Thuật Ngữ và Khái Niệm
    Giới thiệu engine xử lý vật lý Box2D, các khái niệm, cách thành phần ...
    Khởi Tạo Cửa Sổ với DirectX 9
    Hướng dẫn khởi tạo cửa sổ làm việc với DirectX 9.

    Khám phá

    UI - Phần 1: Khái Niệm Và Một Số Đối Tượng Để Thiết Kế UI Trong Cocos2d-x 3.x.x
    Tìm hiểu về khái niệm UI và các đối tượng thiết kế UI trong Cocos2d-x ...
    Giới Thiệu về Sprite - Sprite Sheet - Sprite Animation
    Giới thiệu về Sprite - Sprite Sheet - Sprite Animation, hướng dẫn 1 số ...
    Thuật Ngữ Server và Thuật Ngữ Client
    Khái niệm Server và Client mở rộng không chỉ nhằm hiểu về Server và ...
    02/05/2014
    Load Sprite trong DirectX 9
    Hiện thực load Sprite từ cơ bản đến các thao tác nâng cao như flip, ...
    Tìm Hiểu về Game Loop - Vòng Lặp Game
    Game loop là 1 vòng lắp được lặp đi lặp lại liên tục, giữ cho game vận ...
    Biến và Kiểu Dữ Liệu Cơ Bản trong Java
    Giới thiệu khái niệm, phạm vi hoạt động của biến và các kiểu dữ liệu ...
    11/05/2015
    Sprite Animation trong DirectX 9
    Hướng dẫn tạo tập tin lưu tọa độ các tile từ một sprite sheet có sẵn và ...
    Rvalue References và Move Semantics
    Khái niệm rvalue reference, và ứng dụng để định nghĩa "move semantic" ...
    02/12/2014
    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    developer@stdio.vn

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020