summaryrefslogtreecommitdiff
path: root/pix.py
blob: 988f83db26cb2dc8c03e62a84d8769e7c9c3d72b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import sys
from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
from PIL import Image
from time import time

from transition import Transition

display_time = 2.0
transition_duration = 0.5

# Load image as a texture using PIL
def load_texture(image_path):
    img = Image.open(image_path)
    img = img.convert("RGBA")  # Ensure the image is in RGBA mode (4 channels: R, G, B, A)
    img_data = img.tobytes("raw", "RGBA", 0, -1)  # Convert image data to bytes

    texture_id = glGenTextures(1)
    glBindTexture(GL_TEXTURE_2D, texture_id)
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img.width, img.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, img_data)
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
    return texture_id

# Main display function
transition = Transition()
def display():
    global start_time, image_time, last_time, alpha, texture_id1, texture_id2

    current_time = time()
    alive_time = current_time - start_time
    delta_time = current_time - last_time
    last_time = current_time
    image_time += delta_time

    if (image_time < display_time):
        return

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    glLoadIdentity()

    # Get window size
    window_width, window_height = glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT)

    # DRAW
    transition_time = image_time - display_time
    complete = transition.draw(texture_id1, texture_id2, window_width, window_height, delta_time, transition_time, transition_duration)

    glClearColor(0.0, 0.0, 0.0, 1.0)  # Set the background color to black

    glutSwapBuffers()

    if (complete):
        image_time = 0
        texture_id1, texture_id2 = texture_id2, texture_id1

# Initialization and main loop
def main():
    global texture_id1, texture_id2, alpha, last_time, start_time, image_time

    # Initialize the window
    glutInit(sys.argv)
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB)
    glutCreateWindow("Image Viewer with Fade Transition")
    glEnable(GL_TEXTURE_2D)

    # Load two images for transition
    texture_id1 = load_texture("image1.jpg")
    texture_id2 = load_texture("image2.jpg")

    alpha = 0.0  # Start with fully transparent
    image_time = 0
    start_time = time()
    last_time = time()

    # Set up the OpenGL viewport and projection
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glOrtho(-1, 1, -1, 1, -1, 1)
    glMatrixMode(GL_MODELVIEW)

    glutDisplayFunc(display)
    glutIdleFunc(display)
    glutMainLoop()

if __name__ == "__main__":
    main()